stream把一个集合里面根据id分成几个集合_Java高级核心之玩转 JDK8 集合框架进阶...
时间: 2024-01-14 16:04:15 浏览: 112
可以使用Java 8中提供的Stream API和Collectors工具类来完成这个任务。下面是一个示例代码:
假设你有一个集合List<MyObject>,每个MyObject对象都有一个id属性,你想把这个集合按照id属性分成几个集合。
首先,你需要定义一个Map,用于存储分组后的集合,其中key是id属性的值,value是相应的集合。然后,你可以使用Stream API的collect方法和Collectors.groupingBy方法来将集合分组。
示例代码如下:
```
Map<Integer, List<MyObject>> groupedMap = myList.stream()
.collect(Collectors.groupingBy(MyObject::getId));
```
这会将myList集合中的所有元素按照id属性分组,并将结果存储在groupedMap中。
如果你希望根据id属性的值将集合分成固定数量的子集合,可以使用Collectors.groupingByConcurrent方法和Collectors.mapping方法。示例代码如下:
```
int groupCount = 3;
Map<Integer, List<List<MyObject>>> groupedMap = myList.stream()
.collect(Collectors.groupingByConcurrent(
MyObject::getId,
Collectors.mapping(
Function.identity(),
Collectors.groupingByConcurrent(
obj -> Math.abs(obj.getId() % groupCount)
)
)
));
```
这会将myList集合中的所有元素按照id属性分组,并将结果存储在groupedMap中。其中,groupCount是你希望分成的子集合数量。最终,groupedMap中的value是一个List,其中包含了groupCount个子集合,每个子集合中包含了相应id属性值的元素。
阅读全文