我正在寻找功能性的java 8解决方案,解决将数组拆分为包含相等元素的子列表的问题;
即:
ArrayList.asList(1,2,2,3,4,4,4) --> List([1],[2,2],[3], [4,4,4])
到目前为止,我设法只找到计算这些元素的解决方案:
Map<Integer,Integer> count = lst.stream().collect(Collectors.groupingBy(s -> s, Collectors.counting()));
会产生一个count - value的映射,这还不够好。
很高兴得到一些提示,我想我确实需要先以某种方式映射,然后获取entrySet;
答案 0 :(得分:5)
List<List<Integer>> list = Arrays.asList(1,2,2,3,4,4,4).stream()
// grouping gets you a Map<Integer,List<Integer>>
.collect(Collectors.groupingBy(s -> s))
// take the values of this map and create of stream of these List<Integer>s
.values().stream()
// collect them into a List
.collect(Collectors.toList());
打印结果可以获得所需的列表列表:
System.out.println(list);
[1,[2,2],[3],[4,4,4]]
编辑:Alexis C.对此替代方案的信用:
Arrays.asList(1,2,2,3,4,4,4).stream()
.collect(collectingAndThen(groupingBy(s -> s), m -> new ArrayList<>(m.values())));