List source = Arrays.asList("USA", "USA", "Japan", "China", "China", "USA", "USA");
我想从这个源创建对象(Map),例如
int usa_count = result.get("USA").intValue(); // == 4
int javan_count = result.get("Japan").intValue(); // == 1
int china_count = result.get("China").intValue(); // == 2
int uk_count = result.get("UK").intValue(); // == 0 or NPE (both OK)
现在,我在下面写.
Map result = new HashMap<>();
for (String str : source) {
Integer i = result.getOrDefault(str, Integer.valueOf(0));
result.put(str, i + 1);
}
虽然,这足以达到我的目的,但我认为这不是优雅的代码,我想成为一个优雅的编码器.
我使用Java8.
有没有优雅的解决方案而不是我的解决方案?
解决方法:
您可以使用stream groupingBy,如下所示:
List source = Arrays.asList("USA", "USA", "Japan",
"China", "China", "USA", "USA");
Map result =
source.stream().collect(
//Use groupingBy
Collectors.groupingBy(
Function.identity(), Collectors.counting()
)
);
System.out.println(result);
输出:{USA = 4,China = 2,Japan = 1}
标签:java,collections
来源: https://codeday.me/bug/20190608/1198438.html