3 回答

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊
我認(rèn)為您只是在尋找過載,它需要另一個(gè)負(fù)載Collector來指定對每個(gè)組的處理方式...然后Collectors.counting()進(jìn)行計(jì)數(shù):
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);
}
}
結(jié)果:
{Hello=2, World=1}
(也有可能使用groupingByConcurrent來提高效率。如果在您的上下文中安全的話,請記住您的真實(shí)代碼。)

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊
這是完成手頭任務(wù)的略有不同的選擇。
使用toMap:
list.stream()
.collect(Collectors.toMap(Function.identity(), e -> 1, Math::addExact));
使用Map::merge:
Map<String, Integer> accumulator = new HashMap<>();
list.forEach(s -> accumulator.merge(s, 1, Math::addExact));
添加回答
舉報(bào)