大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。
这期给大家讲一下在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
}
打印结果如下:
使用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()方法找到最小值等。
- 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
}
结果如下:
- 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
}
结果如下:
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利用了函数式编程的思想,使得代码更加简洁、优雅和易于阅读。