概述
文章目录
- 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 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.在自定义方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复