A port of kotlin-stdlib for Dart/Flutter including immutable collections (KtList, KtMap, KtSet) and other packages
APACHE-2.0 License
Bot releases are hidden (Show)
KtMutableMapEntry.setValue()
is now implemented (thx @hugobrancowb)KtIterable.firstNotNullOf()
KtIterable.firstNotNullOfOrNull()
(thx @hugobrancowb)@useReslt
(thx @nohli)mapNotNull
, mapNotNullTo
, mapIndexedNotNull
, mapIndexedNotNullTo
, filterNotNullTo
work now correctly for non-nullable typesPublished by passsy about 2 years ago
KtIterable.sumOf
thx @nohliFull Changelog: https://github.com/passsy/kt.dart/compare/v0.10.0...v1.0.0
Published by passsy almost 3 years ago
Some nullsafety improvements, type fixes and a lot of new Kotlin 1.4 extensions
#141 Fix: requireNoNulls()
now converts T?
to T
1df6e1a Fix: .dart
and .iter
on Iterable<T>
now work for all types not only if T implements Comparable
f43cbc5 Fix: *NotNull
methods now return non-nullable types
b727893 Fix: The hashcode of all collections doesn't get cached anymore. That caused problems when mutable items in a KtList
changed. The equals
and hashCode
methods now always change together.
#141 Improve: KtIterable.onEach
can now be chained
#141 New: KtIterable.cast()
to manually cast values
#141 New: KtIterable.onEachIndexed
#163 New: KtIterable.shuffled()
#166 New: KtIterable.reduceOrNull()
#169 New: KtMutableList.removeFirst()
KtMutableList.removeLast()
#173 New: KtMutableList.removeFirstOrNull()
KtMutableList.removeLastOrNull()
#171 New: KtIterable.minOf()
#165 New: String.replaceFirstChar()
#170 New: KtIterable.minOrNull()
, KtIterable.maxOrNull()
, deprecates KtIterable.min()
, KtIterable.max()
,
#174 New: KtIterable.runningReduce()
#177 New: KtCollection.randomOrNull()
#178 New: KtIterable.flatMapIndexed
, KtIterable.flatMapIndexedTo
Thanks to the #hacktoberfest contributors @Anas35, @robiness, @MatthaiosSait, @Dev-dfm, @marciokuroki, @Rishabh-Negi
KtIterable<T>.sumByDouble
in favor of KtIterable<T>.sumBy
which now works for int
and double
KtMap.getOrDefault
now returns V
instead of V?
KtMap.groupBy
returning KtMap<K, KtMutableList<T>>
instead of KtMap<K, KtList<T>>
causing generic type problems in further processingNew package:kt_dart/standard.dart
library containing Kotlins loved standard extensions
let
, also
, takeIf
and takeUnless
TODO([String message])
top-level function which throws NotImplementedException
repeat(int times, void Function(int) action)
top-level functionMore cool updates
KtList.of
and KtSet.of
now allow null
as parameters. Same for listOf
and setOf
thenBy
and thenByDescending
functions..empty()
constructors for KtList
, KtMap
and KtSet
(Thanks @TimWhiting)plus
, minus
operator overrides for KtSet
, returning KtSet
and not KtList
as the KtIterable
operators doKtList.of
and KtSet.of
now allow null
as parameters. Same for listOf
and setOf
let
, also
, takeIf
and takeUnless
TODO([String message])
top-level function which throws NotImplementedException
repeat(int times, void Function(int) action)
top-level function.empty()
constructors for KtList
, KtMap
and KtSet
(Thanks @TimWhiting)plus
, minus
operator overrides for KtSet
, returning KtSet
and not KtList
as the KtIterable
operators doThe library has be upgrade to use Static Extension Methods
.
This update also includes extensions for Dart collections which allow easy interoperability between dart and kt.dart collections using the .kt
and .dart
getters.
// New: Converting dart collections to KtDart collections (mutable views)
final KtMutableList<String> ktList = ["hey"].kt;
final KtMutableSet<String> ktSet = {"hey"}.kt;
final KtMutableMap<String, int> ktMap = {"hey": 1}.kt;
// Converting KtDart collections to dart collections
final List<String> dartList = KtList.of("hey").dart;
final Set<String> dartSet = KtSet.of("hey").dart;
final Map<String, int> dartMap = KtMap.from({"hey": 1}).dart;
Note: ["Hello", "World"].kt
returns a KtMutableList<String>
and mutations are reflected on the original dart list. It is not a copy! Because it doesn't copy it is very cheap and only syntax sugar.
To convert dart collections to their immutable kt.dart counterparts use: .toImmutableList()
, .toImmutableSet()
, .toImmutableMap()
// New: Make dart collections immutable
final KtList<String> list = ["hey"].toImmutableList();
final KtSet<String> set = {"hey"}.toImmutableSet();
final KtMap<String, int> map = {"hey": 1}.toImmutableMap();
sortBy
/sortByDescending
, maxBy
/minBy
typing to work better with ints and doubles #116
// Was: int doesn't not implement Comparable<int> but Comparable<num>
// minBy therefore required some help to figure out the correct type (<num>)
users.minBy<num>((it) => it.age);
// Now: minBy doesn't require the Comparable (num) to have the same same as the value (int).
users.minBy((it) => it.age);
R
from KtIterable.zipWithNext
#118
KtPair
and KtTriple
now have a new toList()
function to convert the values to a KtList
KtList?.orEmpty()
returns an empty list when the list is null
KtSet?.orEmpty()
returns an empty set when the set is null
KtMap?.orEmpty()
returns an empty map when the map is null
KtMap.ifEmpty(() -> defaultValue)
returns the default value when the map is emptyKtIterable<KtIterable<T>>.flatten()
flattens the nested collections to KtIterable<T>
KtIterable<KtPair<T, U>>.unzip(): KtPair<KtList<T>, KtList<U>>
unzips list of pairs to list of their first and second valuesKtIterable<Comparable<T>>.min()
returns the smallest element of any comparable iterableKtIterable<Comparable<T>>.max()
returns the largest element of any comparable iterableIterable.toImmutableList(): KtList
Iterable.toImmutableSet(): KtSet
KtIterable<num>.average(): double
sortBy
/sortByDescending
, maxBy
/minBy
typing to work better with ints and doubles// Was: int doesn't not implement Comparable<int> but Comparable<num>
// minBy therefore required some help to figure out the correct type (<num>)
users.minBy<num>((it) => it.age);
// Now: minBy doesn't require the Comparable (num) to have the same same as the value (int).
users.minBy((it) => it.age);
(List|Set|Map).immutable()
extension to .toImmutableList()
to match Dart SDK naming schema.int.rangeTo(X)
extension. Please use the dartx
as replacement which offers the same extensionT.to(X)
extension to create a KtPair
. It's too general and should be offered by the dart SDK not a 3rd party packagePublished by passsy almost 5 years ago
New .dart
extensions to convert KtDart collections back to dart collections.
// New: Converting dart collections to KtDart collections (mutable views)
final KtMutableList<String> ktList = ["hey"].kt;
final KtMutableSet<String> ktSet = {"hey"}.kt;
final KtMutableMap<String, int> ktMap = {"hey": 1}.kt;
// Converting KtDart collections to dart collections
final List<String> dartList = KtList.of("hey").dart;
final Set<String> dartSet = KtSet.of("hey").dart;
final Map<String, int> dartMap = KtMap.from({"hey": 1}).dart;
dependencies:
kt_dart: ^0.7.0-dev.2
Published by passsy almost 5 years ago
KtDart makes full use of darts static extension methods, introduced with Dart 2.6.
The public API stays unchanged and is backwards compatible.
It is now easier then ever to convert dart to ktdart collections and vice versa. Use the .kt
property to convert dart collections to KtDart collections. (Note: .kt
create a view, which allows you to mutate the original dart collection).
// New: Make dart collections immutable
final KtList<String> list = ["hey"].immutable();
final KtSet<String> set = {"hey"}.immutable();
final KtMap<String, int> map = {"hey": 1}.immutable();
// New: Converting dart collections to KtDart collections (mutable views)
final KtMutableList<String> ktList = ["hey"].kt;
final KtMutableSet<String> ktSet = {"hey"}.kt;
final KtMutableMap<String, int> ktMap = {"hey": 1}.kt;
// Converting KtDart collections to dart collections
final List<String> dartList = KtList.of("hey").asList();
final Set<String> dartSet = KtSet.of("hey").asSet();
final Map<String, int> dartMap = KtMap.from({"hey": 1}).asMap();
KtPair
s can now created with the T0.to(T1)
extension.
final KtPair<String, int> pair = "foo".to(42);
Also, KtPair
and KtTriple
now have a new toList()
function to convert the values to a KtList
.
KtList?.orEmpty()
returns an empty list when the list is null
KtSet?.orEmpty()
returns an empty set when the set is null
KtMap?.orEmpty()
returns an empty map when the map is null
KtMap.ifEmpty(() -> defaultValue)
returns the default value when the map is emptyKtIterable<KtIterable<T>>.flatten()
flattens the nested collections to KtIterable<T>
KtIterable<KtPair<T, U>>.unzip(): KtPair<KtList<T>, KtList<U>>
unzips list of pairs to list of their first and second valuesKtIterable<Comparable<T>>.min()
returns the smallest element of any comparable iterableKtIterable<Comparable<T>>.max()
returns the largest element of any comparable iterabledependencies:
kt_dart: ^0.7.0-dev.1
Published by passsy over 5 years ago
Published by passsy over 5 years ago
This major update of kt.dart adds 16+ extension methods to KtMap
and makes working with maps even easier.
The properties KtList.list: List
,KtSet.set: Set
are now deprecated and KtMap.map: Map
was removed. Those properties where used to convert kt.dart collections to dart collections.
Instead use the new KtList.asList(): List
, KtSet.asSet(): Set
, KtMa.asMap(): Map
methods.
The old properties returned copies of the collections.
The new as
-methods return views of the original collections and reflect changes of the original data.
This breaking change was necessary because the property KtMap.map: Map<K, V>
was conflicting with KtMap.map(MapEntry<K, V> -> R) : KtList<R>
to map the entries to items of a KtList
.
Read about further details here.
If you have used properties to iterate over the collections using a for-loop you should now always use iter
which is available for all kt.dart collections.
for (final element in listOf("a", "b", "c").iter) {
print(element);
}
for (final element in setOf("a", "b", "c").iter) {
print(element);
}
for (final p in mapFrom({1: "Bulbasaur", 2: "Ivysaur"}).iter) {
print("${p.key} -> ${p.value}");
}
KtMap.map
Returns a list containing the results of applying the given transform
function to each entry in the original map.KtMap.iter
Access to a Iterable
to be used in for-loopsKtMap.count
Returns the number of entries matching the given [predicate] or the number of entries when predicate = null
.KtMap.minBy
Returns the first entry yielding the smallest value of the given function or null
if there are no entries.KtMap.minWith
Returns the first entry having the smallest value according to the provided comparator
or null
if there are no entries.KtMap.maxBy
Returns the first entry yielding the largest value of the given function or null
if there are no entries.KtMap.maxWith
Returns the first entry having the largest value according to the provided comparator
or null
if there are no entries.KtMap.toList
Returns a KtList
containing all key-value pairs.KtMap.forEach
Performs given action
on each key/value pair from this map. thanks @acherkashynKtMap.none
Returns true
if there is no entries in the map that match the given predicate
. thanks @acherkashynKtMap.all
Returns true if all entries match the given predicate
. thanks @acherkashynKtMap.any
Returns true if there is at least one entry that matches the given predicate
. thanks @acherkashynKtMap.filterKeys
Returns a map containing all key-value pairs with keys matching the given predicate
.KtMap.filterValues
Returns a map containing all key-value pairs with values matching the given predicate
.KtMap.asMap
Returns a read-only dart:core Map
KtMutableMap.asMap
Creates a Map
instance that wraps the original KtMap
. It acts as a view.KtIterable.takeWhile
Returns a list containing first elements satisfying the given predicate
.KtIterable.takeLastWhile
Returns a list containing last elements satisfying the given predicate
.KtList.takeLast
, Returns a list containing last n
elements.KtList.asList
Returns a read-only dart:core List
KtMutableList.asList
Creates a List
instance that wraps the original KtList
. It acts as a view.KtSet.asSet
Returns a read-only dart:core Set
KtMutableSet.asSet
Creates a Set
instance that wraps the original KtSet
. It acts as a view.KtMutableListIterator
throws IndexOutOfBoundsException
when calling set
before next
was calleddependencies:
kt_dart: ^0.6.0
Published by passsy almost 6 years ago
This project has been renamed to kt.dart
. If you're using a previous version upgrade like this:
pubspec.yaml
dependencies:
- dart_kollection: ^0.3.0
- kotlin_dart: ^0.4.0
+ kt_dart: ^0.5.0
your_source.dart
- import 'package:dart_kollection/dart_kollection.dart';
- import 'package:kotlin_dart/kotlin.dart';
+ import 'package:kt_dart/kt.dart';
Published by passsy almost 6 years ago
Deprecate package kotlin_dart
and recommend users to migrate to kt_dart
.
Published by passsy almost 6 years ago
Deprecate package dart_kollection
in favour of kt_dart
Published by passsy almost 6 years ago
Shorten pub project description to make pana happy.