我遇到了一个问题,我需要在对字符串列表执行的操作中保留顺序,并使用
collect
方法从Java流API。
public List countOccurrences(ArrayList messages) {
List stackedMessages = new LinkedList<>();
HashMap messageOccurrences =
messages.stream()
.collect(groupingBy(Function.identity(), summingInt(e -> 1)));
messageOccurrences.forEach((key, value) -> {
String appendString = value == 1 ? "" : " (" + value + " times)";
stackedMessages.add(key + appendString);
});
return stackedMessages;
}
上面代码的问题是如果我处理
["blah", "blah", "yep"]
它回来了
["yep", "blah (2 times)"]
我需要它回来的地方
["blah (2 times)", "yep"]
.
我想我需要改变
groupingBy
到
toMap
从现在起,我正在阅读这些文件。任何精通这一主题的人都请提出一些建议。
更新:
感谢用户@aomin¨,这是使用groupingby的正确方法
.collect(groupingBy(Function.identity(),LinkedHashMap::new, summingInt(e->1)))