1、toMap()参数
toMap(Function keyMapper, Function valueMapper, BinaryOperator mergeFunction, Supplier mapSupplier)
第一个参数:用来生成key值的。
第二个参数:用来生成value值的。
第三个参数:可选,用来定义在key值冲突的情况下的value的值。
第四个参数:可选,它返回一个Map
,其中的数据作为键/值填充。
如果我们没有传递 Supplier mapSupplier
,那么默认的supplier
将返回HashMap
。
如果我们想要其他实例,比如LinkedHashMap
,我们需要将supplier
传递为LinkedHashMap::new
。
public static void main(String[] args) {
List<Person> list = new ArrayList();
(new Person(1, "1"));
(new Person(2, "2"));
(new Person(3, "3"));
Map<Integer, Person> collect = ().collect((Person::getId, ()));
Map<Integer, Person> collect1 = ().collect((Person::getId, (), (a,b)->a));
Map<Integer, Person> collect2 = ().collect((Person::getId, v -> v, (a,b)->a));
Collection<Person> values = ().collect((Person::getId, (), (a, b) -> a)).values();
long count = ().collect((Person::getId, (), (a, b) -> a)).values().stream().count();
Map<Integer, String> map = ()
.collect((Person::getId, Person::getName, (x, y) -> x+", "+ y));
LinkedHashMap<Integer, String> map = ()
.collect((Person::getId, Person::getName,
(x, y) -> x+", "+ y, LinkedHashMap::new));
(Person::getId, v -> v, (a,b)->a, LinkedHashMap::new)中
第一个参数:Person:getId表示选择Person的getId作为map的key值。
第二个参数:v->v表示选择将原来的对象作为Map的value值。
第三个参数:(a,b)->a中,如果a与b的key值相同,选择a作为那个key所对应的value值。
如果key冲突,不加(a,b)->a会报错误:illeglastateException。
第四个参数: LinkedHashMap::new,返回Map的类型是LinkedHashMap。