Java中Stream流用法

时间:2025-05-13 07:20:39

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。