Collectors.groupingBy(x::getid)和Collectors.groupingBy(x -> x.getid)的区别
时间: 2023-10-28 21:37:07 浏览: 107
`Collectors.groupingBy(x::getid)`和`Collectors.groupingBy(x -> x.getid)`其实是等价的。
`x::getid`是一种方法引用,它表示调用`x`对象的`getid()`方法。而`x -> x.getid`则是一种Lambda表达式,它也表示调用`x`对象的`getid()`方法。
两者的区别在于语法上的差异,使用方法引用可以让代码更加简洁易读。但是需要注意的是,方法引用只能用于调用一个方法,而Lambda表达式可以做更多的事情,比如可以在Lambda表达式中编写多行代码。
相关问题
Map<String,List<User>> stringListMap = list.stream().collect(Collectors.groupingBy(User::getId));
这是一个关于 Java 语言的问题,我可以回答。这段代码使用 Java 8 的 Stream API,将一个 User 对象的列表按照其 id 属性进行分组,返回一个 Map,其中 key 是 id,value 是该 id 对应的 User 对象列表。
Map<Long, List<Long>> listMap = childes.stream().collect(Collectors.groupingBy(Factory::getParentId,Factory::getId));正确写法
这个写法是有问题的。Collectors.groupingBy方法的第二个参数是一个Collector,而Factory::getId不是一个Collector类型。正确的写法应该是使用Collectors.mapping方法,将Factory对象转换为id属性,然后再使用Collectors.toList将其收集到一个List中,最终形成一个List<Long>集合。例如:
```
Map<Long, List<Long>> listMap = childes.stream().collect(Collectors.groupingBy(Factory::getParentId, Collectors.mapping(Factory::getId, Collectors.toList())));
```
这样就可以按照parentId属性进行分组,并将同一组内的Factory对象的id属性,组装成一个List<Long>集合作为分组结果。
阅读全文