[英]Convert list to Map having key as sum of even numbers and value as sum of odd numbers using java8
Hello I need to build a Map using below criteria:您好,我需要使用以下标准构建地图:
I have List<Integer> = Arrays.of(1,2,3,4,5,6,7,8,9);
我有
List<Integer> = Arrays.of(1,2,3,4,5,6,7,8,9);
my output should be a Map<Integer,Integer>
我的输出应该是
Map<Integer,Integer>
such that key of the map should be sum of even numbers = 2+4+6+8=20这样地图的关键应该是偶数之和 = 2+4+6+8=20
and the value of the map should be sum of odd numbers = 1+3+5+7+9=25并且地图的值应该是奇数之和 = 1+3+5+7+9=25
My output should be key=20 and value=25.我的输出应该是 key=20 和 value=25。 I need to do it using java8.
我需要使用java8来做到这一点。
You can do something like that:你可以这样做:
import java.util.Map;
import java.util.List;
class Main {
public static void main(String[] args) {
final List<Integer> values = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9);
int sumOdd = 0;
int sumEven = 0;
for (int value : values) {
if (value % 2 == 0) {
sumEven += value;
} else {
sumOdd += value;
}
}
final Map<Integer, Integer> result = Map.of(sumOdd, sumEven);
System.out.println(result);
// Outputs {20=25}
}
}
You can also use Java streams, but this will iterate over the list twice:您也可以使用 Java 流,但这将遍历列表两次:
import java.util.Map;
import java.util.List;
import java.util.stream.Stream;
import java.util.stream.Collectors;
class Main {
public static void main(String[] args) {
final List<Integer> values = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9);
final int sumOdd = values.stream()
.filter(v -> v % 2 != 0)
.collect(Collectors.summingInt(Integer::intValue));
final int sumEven = values.stream()
.filter(v -> v % 2 == 0)
.collect(Collectors.summingInt(Integer::intValue));
final Map<Integer, Integer> result = Map.of(sumEven, sumOdd);
System.out.println(result);
// Outputs {20=25}
}
}
The easiest way can be like below:-最简单的方法如下:-
List<Integer> listInteger = Arrays.asList(new Integer[] {1,2,3,4,5,6,7,8,9});
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
Integer key = listInteger.stream().filter(x -> x%2 ==0).reduce(0, (a,b)-> a+b);
Integer value = listInteger.stream().filter(x -> x%2 == 1).reduce(0, (a,b)-> a+b);
map.put(key, value);
System.out.println(map);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.