文章目录
- 1.使用`IntStream.sum()`求和
- 2.在`Stream.collect()`中使用`Collectors.summingInt()`求和
- 3.在`Stream.collect()`和`IntSummaryStatistics`中使用`Collectors.summarizingInt()`求和
- 4.在`BiFunction`和`BinaryOperator`使用`Stream.reduce()`求和
- 5.在自定义方法中使用`Stream.reduce()`求和
- 6.`Array`获取总数的示例
- 7.`List`获取总数的示例
- 8.`List`中嵌套`Array`获取总数的示例
- 9.`Map`获取总数的示例
- 参考文献
在本页中,我们将使用
reduce()和
collect()方法提供
Java8
Array,
Map和
List集合值的总和示例。
在Java8中,有多种计算值总和的方法。我们可以利用IntStream.sum()从汇总统计中得到总数。
我们也可以创建自己的方法来求和。
我们将在这里讨论计算总和的不同方法。
1.使用IntStream.sum()求和
对于integer数据类型,我们可以用IntStream.sum()求和。
int sum = map.values().stream().mapToInt(i->i).sum();
int sum = list.stream().map(Line::getLength).mapToInt(Integer::intValue).sum();
在Java8中,对于long数据类型,有LongStream;对于double数据类型,有DoubleStream。
2.在Stream.collect()中使用Collectors.summingInt()求和
我们可以在Stream.collect()中使用Collectors.summingInt()对integer数据类型获取总数
int sum = list.stream().map(Line::getLength).collect(Collectors.summingInt(i->i));
在Java8中,对于long数据类型,有summingLong;对于double数据类型,有summingDouble。
3.在Stream.collect()和IntSummaryStatistics中使用Collectors.summarizingInt()求和
在Stream.collect()和IntSummaryStatistics中使用Collectors.summarizingInt()获得总数
IntSummaryStatistics stats = list.stream()
.collect(Collectors.summarizingInt(Line::getLength));
IntSummaryStatistics stats = list.stream().flatMap(a->Arrays.stream(a))
.collect(Collectors.summarizingInt(i->i));
System.out.println(stats.getSum());
在Java8中,对于long数据类型,我们在LongSummaryStatistics使用summingLong;对于double数据类型,我们在DoubleSummaryStatistics使用summingDouble。
Line是我们自定义的类
Line.java
package com.concretepage;
public class Line {
private int length;
public Line(int length) {
this.length = length;
}
public int getLength() {
return length;
}
}
4.在BiFunction和BinaryOperator使用Stream.reduce()求和
我们可以用Stream.reduce()在并行处理中,BiFunction作为累加器(accumulator),BinaryOperator作为组合器(combiner)。
int sum = list.parallelStream().reduce(0, (output, ob) -> output + ob.getLength(), (a, b) -> a + b);
这里0是一个标识(identity)。对流的每个元素使用BinaryOperator来操作标识。如果标识(identity)为0,那么在我们的示例中,它将获得stream元素的和。
5.在自定义方法中使用Stream.reduce()求和
要执行加法,我们还可以使用自定义方法Stream.reduce()如下。
int sum = Arrays.stream(array).reduce(0, StatisticsUtility::addIntData);
这里StatisticsUtility是我们的自定义类
StatisticsUtility.java
package com.concretepage;
public class StatisticsUtility {
public static int addIntData(int num1, int num2) {
return num1 + num2;
}
}
我们也可以使用内置类进行求和。
int sum = Arrays.stream(array).reduce(0, Integer::sum);
6.Array获取总数的示例
SumOfArrayDemo.java
package com.concretepage;
import java.util.Arrays;
import java.util.function.IntBinaryOperator;
public class SumOfArrayDemo {
public static void main(String[] args) {
int[] array = {23,43,56,97,32};
System.out.println("--Using IntStream.sum()--");
int sum = Arrays.stream(array).sum();
System.out.println(sum);
System.out.println("--Using Stream.reduce() with IntBinaryOperator--");
IntBinaryOperator ibop = (x,y) -> x+y;
sum = Arrays.stream(array).reduce(0, ibop);
System.out.println(sum);
System.out.println("--Using Stream.reduce() with Integer.sum()--");
sum = Arrays.stream(array).reduce(0, Integer::sum);
System.out.println(sum);
System.out.println("--Using custom method--");
sum = Arrays.stream(array).reduce(0, StatisticsUtility::addIntData);
System.out.println(sum);
}
}
输出
--Using IntStream.sum()--
251
--Using Stream.reduce() with IntBinaryOperator--
251
--Using Stream.reduce() with Integer.sum()--
251
--Using custom method--
251
7.List获取总数的示例
SumOfListDemo.java
package com.concretepage;
import java.util.ArrayList;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.stream.Collectors;
public class SumOfListDemo {
public static void main(String[] args) {
List<Line> list = new ArrayList<>();
list.add(new Line(213));
list.add(new Line(233));
list.add(new Line(243));
list.add(new Line(253));
System.out.println("--Using IntStream.sum()--");
int sum = list.stream().map(Line::getLength).mapToInt(Integer::intValue).sum();
System.out.println(sum);
System.out.println("--Using Collectors.summingInt()--");
sum = list.stream().map(Line::getLength).collect(Collectors.summingInt(i->i));
System.out.println(sum);
System.out.println("--Using summarizingInt()--");
IntSummaryStatistics stats = list.stream()
.collect(Collectors.summarizingInt(Line::getLength));
System.out.println(stats.getSum());
System.out.println("--Using Stream.reduce() with combiner--");
sum = list.parallelStream().reduce(0, (output, ob) -> output + ob.getLength(), (a, b) -> a + b);
System.out.println(sum);
}
}
输出
--Using IntStream.sum()--
942
--Using Collectors.summingInt()--
942
--Using summarizingInt()--
942
--Using Stream.reduce() with combiner--
942
8.List中嵌套Array获取总数的示例
SumOfListOfArrayDemo.java
package com.concretepage;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.stream.Collectors;
public class SumOfListOfArrayDemo {
public static void main(String[] args) {
List<Integer[]> list = new ArrayList<>();
Integer[] a1 = {6,3,8,12};
list.add(a1);
Integer[] a2 = {8,13,9,22};
list.add(a2);
System.out.println("--Using Collectors.summingInt()--");
int sum = list.stream().flatMap(a->Arrays.stream(a)).
collect(Collectors.summingInt(i->i));
System.out.println(sum);
System.out.println("--Using Collectors.summarizingInt()--");
IntSummaryStatistics stats = list.stream().flatMap(a->Arrays.stream(a))
.collect(Collectors.summarizingInt(i->i));
System.out.println(stats.getSum());
System.out.println("--Using IntStream.sum()--");
sum = list.stream().flatMap(a->Arrays.stream(a)).
mapToInt(Integer::intValue).sum();
System.out.println(sum);
}
}
输出
--Using Collectors.summingInt()--
81
--Using Collectors.summarizingInt()--
81
--Using IntStream.sum()--
81
9.Map获取总数的示例
SumOfMapValues.java
package com.concretepage;
import java.util.HashMap;
import java.util.IntSummaryStatistics;
import java.util.Map;
import java.util.stream.Collectors;
public class SumOfMapValues {
public static void main(String[] args) {
Map<Integer, Integer> map = new HashMap<>();
map.put(1, 12);
map.put(2, 24);
map.put(3, 10);
System.out.println("--Using IntStream.sum()--");
int sum = map.values().stream().mapToInt(i->i).sum();
System.out.println(sum);
System.out.println("--Using BinaryOperator--");
sum = map.values().stream().reduce(0, Integer::sum);
System.out.println(sum);
System.out.println("--Using Collectors.summingInt()--");
sum = map.values().stream().collect(Collectors.summingInt(i->i));
System.out.println(sum);
System.out.println("--Using Collectors.summarizingInt()--");
IntSummaryStatistics stats = map.values().stream().collect(Collectors.summarizingInt(i->i));
System.out.println(stats.getSum());
System.out.println("--Using custom method--");
sum = map.values().stream().reduce(0, StatisticsUtility::addIntData);
System.out.println(sum);
}
}
输出
--Using IntStream.sum()--
46
--Using BinaryOperator--
46
--Using Collectors.summingInt()--
46
--Using Collectors.summarizingInt()--
46
--Using custom method--
46
参考文献
【1】Java 8 Sum: Array, Map and List Collection Example using reduce() and collect() Method
最后
以上就是怡然大雁最近收集整理的关于【Java 8 新特性】Array, Map和List集合通过reduce()和collect()方法获取总数1.使用IntStream.sum()求和2.在Stream.collect()中使用Collectors.summingInt()求和3.在Stream.collect()和IntSummaryStatistics中使用Collectors.summarizingInt()求和4.在BiFunction和BinaryOperator使用Stream.reduce()求和5.在自定义方法的全部内容,更多相关【Java内容请搜索靠谱客的其他文章。
发表评论 取消回复