blob: 419db222a100500b6a0f75390f0ff0ae0b11ef13 [file] [log] [blame]
// Copyright (c) 2020, Google Inc. Please see the AUTHORS file for details.
// All rights reserved. Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
import 'package:built_collection/built_collection.dart';
void main() {
// `built_collection` provides immutable equivalents of Dart SDK `List`,
// `Set` and `Map`: `BuiltList`, `BuiltSet` and `BuiltMap`.
// The easiest way to create them is from collection literals using `build`:
var builtList = [1, 2, 3].build();
var builtSet = {1, 2, 3}.build();
var builtMap = {1: 'one', 2: 'two', 3: 'three'}.build();
// `BuiltList` and `BuiltSet` can also be constructed from any `Iterable`.
// The unnamed constructors act like the SDK `from` constructors, meaning
// the elements are type checked at runtime.
builtList = BuiltList([1, 2, 3]);
builtSet = BuiltSet([1, 2, 3]);
// Alternatively, the `of` constructors match the type to the `Iterable` you
// pass, and so do not need to check the type of elements.
builtList = BuiltList.of([1, 2, 3]);
builtSet = BuiltSet.of([1, 2, 3]);
// `BuiltMap` can be constructed from a `Map` or a `BuiltMap`.
builtMap = BuiltMap({1: 'one', 2: 'two', 3: 'three'});
// Immutable collections can't be updated, but you can create new instances
// based on existing ones. The most convenient way to do that is the
// `rebuild` methods, which give you access to each collection type's
// corresponding builder type.
// For example, to add some elements then sort:
builtList = builtList.rebuild((b) => b
..addAll([7, 6, 5])
..sort());
// Generally, built collections match the SDK collections, except that the
// API has been split in two: read only methods go on the `Built` collection
// types, and mutating methods go on the corresponding `Builder` types.
// If you need to keep a mutable version of the collection around for a
// while, for example to pass it to other methods, you can use `toBuilder`.
// Then, later, the collection is made immutable again by calling `build`.
var listBuilder = builtList.toBuilder();
listBuilder.addAll([10, 9, 8]);
// More changes could go here, including passing the builder to other
// methods.
builtList = listBuilder.build();
// Finally, `built_collection` also provides immutable versions of
// `ListMultimap` and `SetMultimap` from `package:quiver`. For information
// on these, and full details on all the APIs, please see the package
// [dartdoc](https://pub.dev/documentation/built_collection/latest).
// Use the values so the analyzer is happy.
print(builtList);
print(builtSet);
print(builtMap);
}