使用Java8计算int出现次数

Du_*_*Du_ 33 java java-8

有没有更好的方法来计算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)

  • Arrays.setAll(array,counters :: get); (16认同)

Cug*_*uga 6

这可能有一些变化。

您可以使用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)