有没有更好的方法来计算Java8的出现次数
int[] monthCounter = new int[12];
persons.stream().forEach(person -> monthCounter[person.getBirthday().getMonthValue() - 1]++);
Run Code Online (Sandbox Code Playgroud)
Bri*_*etz 78
尝试:
Map<Integer, Long> counters = persons.stream()
.collect(Collectors.groupingBy(p -> p.getBirthday().getMonthValue(),
Collectors.counting()));
Run Code Online (Sandbox Code Playgroud)
这可能有一些变化。
您可以使用Collectors.summingInt()toInteger来代替Longin 计数。
如果您想跳过原始int数组,可以将计数直接存储到List一次迭代中。
将出生月份计算为整数
Map<Integer, Integer> monthsToCounts =
people.stream().collect(
Collectors.groupingBy(p -> p.getBirthday().getMonthValue(),
Collectors.summingInt(a -> 1)));
Run Code Online (Sandbox Code Playgroud)
将出生月份存储在从 0 开始的数组中
int[] monthCounter = new int[12];
people.stream().collect(Collectors.groupingBy(p -> p.getBirthday().getMonthValue(),
Collectors.summingInt(a -> 1)))
.forEach((month, count) -> monthCounter[month-1]=count);
Run Code Online (Sandbox Code Playgroud)
跳过数组,直接将值存储到列表中
List<Integer> counts = people.stream().collect(
Collectors.groupingBy(p -> p.getBirthday().getMonthValue(),
Collectors.summingInt(a -> 1)))
.values().stream().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28549 次 |
| 最近记录: |