使用 Java8 计算整型出现的次数

2022-08-31 20:49:21

有没有更好的方法来计算 Java8 的 int 出现次数

int[] monthCounter = new int[12];
persons.stream().forEach(person -> monthCounter[person.getBirthday().getMonthValue() - 1]++);

答案 1

尝试:

 Map<Integer, Long> counters = persons.stream()
     .collect(Collectors.groupingBy(p -> p.getBirthday().getMonthValue(), 
         Collectors.counting()));

答案 2

这可能需要一些变化。

您可以使用 to 使用 代替 计数 中的 。Collectors.summingInt()IntegerLong

如果要跳过基元数组,可以将计数直接存储到一次迭代中。intList

将出生月份计为整数

Map<Integer, Integer> monthsToCounts = 
        people.stream().collect(
                Collectors.groupingBy(p -> p.getBirthday().getMonthValue(), 
                Collectors.summingInt(a -> 1)));

将出生月份存储在从 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);

跳过数组并直接将值存储到列表中

List<Integer> counts = people.stream().collect(
        Collectors.groupingBy(p -> p.getBirthday().getMonthValue(), 
        Collectors.summingInt(a -> 1)))
        .values().stream().collect(Collectors.toList());

推荐