我试图计算List<List<String>>
中每个元素的出现次数,并将结果存储在Map<String,Long>
中。
Map<String, Long> map = new HashMap<>();
for(List<String> l : data) {
for(int i = 0; i < l.size(); i++) {
String myString = l.get(i);
long count = data.stream().filter(d -> myString.equals(d)).count();
map.put(myString, count);
}
}
我的代码为每个键返回零作为值。有办法解决吗?谢谢。
答案 0 :(得分:4)
尝试一下:
List<List<String>> listOflists = new ArrayList<>();
//Initialize your list here
Map<String, Long> map = listOflists.stream().flatMap(Collection::stream)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
答案 1 :(得分:3)
您正在流式传输data
,它是List<List<String>>
。这意味着流的每个元素都具有类型List<String>
。然后,在filter
的lambda中,您尝试查看myString
(类型String
)是否等于d
(类型List<String>
)。对于所有元素,使count
等于0永远都是不正确的。
您需要做的是在data.stream()
返回的流上调用flatMap,函数参数为List::stream
(或Collection::stream
)。这样做是将List<String>
的流转换为String
的流,然后可以在其上调用filter
方法。