简体   繁体   English

使用 java8 将列表转换为映射,键为偶数之和,值为奇数之和

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM