Java8 教你一行代码搞定:如何计算map中value值

大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。

这期给大家讲一下在Java编程中,如何使用Java8对map的值进行计算,在实际开发中,也是经常遇到统计map中的value值之和。

Map是一种常用的数据结构,它用于存储k-v键值对。有时候,我们需要对Map中的值进行统计。笔者给大家介绍一下Java8 Stream API来实现这个目标,让各位读者能够轻松而高效地统计Map中的Value值。

核心代码

map.values().stream().mapToInt(Integer::intValue).sum;

实例:

 public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("A", 10);
        map.put("B", 30);
        map.put("C", 50);
        // 统计所有的value值
        int sum = map.values().stream().mapToInt(Integer::intValue).sum();
        System.out.println(sum); // 90
    }

打印结果如下:

Java8 教你一行代码搞定:如何计算map中value值_第1张图片

使用Stream API的好处不仅仅是简化了代码,还提供了更好的可读性和可维护性。此外,Stream API还可以通过并行处理来提高性能,尤其是对于大规模的数据集。

通过源码分析,让读者加深理解

map.values()

使用map.values()方法获取到Map中的所有值。这将返回一个Collection接口的实现类(通常是ArrayList或HashMap.Values),该实现类表示Map中所有的值。

Collection<Integer> values = map.values();

stream()

通过调用stream()方法,我们将这个值集合转换为一个Stream对象。Stream是Java 8新增的一个类,它提供了一系列操作,可以以函数式的方式对集合进行处理。

Stream<Integer> stream = map.values().stream();

mapToInt()

IntStream intStream = map.values().stream().mapToInt(Integer::intValue);

在上述示例中,我们使用了mapToInt()方法将Stream转换为IntStream,这样我们就可以调用IntStream提供的聚合操作了。比如,我们可以使用sum()方法计算值的总和,max()方法找到最大值,min()方法找到最小值等。

  1. max()
public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("A", 10);
        map.put("B", 80);
        map.put("C", 30);
        
        // 找出map中最大值
        int max = map.values().stream().mapToInt(Integer::intValue).max().orElse(0);
        System.out.println(max); // 80
    }

结果如下:

Java8 教你一行代码搞定:如何计算map中value值_第2张图片

  1. min()
 public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("A", 10);
        map.put("B", 80);
        map.put("C", 30);

        // 找出map中最小值
        int min = map.values().stream().mapToInt(Integer::intValue).min().orElse(0);
        System.out.println(min); // 10
    }

结果如下:
Java8 教你一行代码搞定:如何计算map中value值_第3张图片

orElse()有了解吗

上述orElse()是表示如果map为空的时候,默认返回orElse()方法里面给的默认值,看源码就知道了:

public int orElse(int other) {
        return isPresent ? value : other; // 如果存在,返回value,不存在,返回设置的other参数
    }

在调用max()和min()方法时,它们返回的是一个OptionalInt对象,而不是直接的整数值。OptionalInt是Java 8中引入的Optional的特殊版本,用于处理可能为空的基本类型。我们可以使用orElse()方法来指定当OptionalInt为空时的默认值。

最后

使用Java 8的Stream API对Map的值进行统计,涉及到将值集合转换为Stream对象,然后使用Stream提供的聚合操作来实现统计。Stream API利用了函数式编程的思想,使得代码更加简洁、优雅和易于阅读。

你可能感兴趣的:(java,数据结构,java8,stream,hashmap)