我尝试在Java 8流API中找到一种简单的方法来进行分组,我提出了这种复杂的方法!
List<String> list = new ArrayList<>(); list.add("Hello"); list.add("Hello"); list.add("World"); Map<String, List<String>> collect = list.stream().collect( Collectors.groupingBy(o -> o)); System.out.println(collect); List<String[]> collect2 = collect .entrySet() .stream() .map(e -> new String[] { e.getKey(), String.valueOf(e.getValue().size()) }) .collect(Collectors.toList()); collect2.forEach(o -> System.out.println(o[0] + " >> " + o[1]));
感谢你的投入。
我认为你只是在寻找过载,它需要另一个负载Collector来指定对每个组执行的操作…然后Collectors.counting()进行计数:
Collector
Collectors.counting()
import java.util.*; import java.util.stream.*; class Test { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("Hello"); list.add("Hello"); list.add("World"); Map<String, Long> counted = list.stream() .collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); System.out.println(counted); } }
结果:
{Hello=2, World=1}
(也有可能使用groupingByConcurrent来提高效率。如果在你的上下文中安全的话,请记住你的真实代码。)
groupingByConcurrent