使用java8将列表转换为键为偶数和值为奇数和的Map

piok6c0g  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(311)

您好,我需要使用以下条件构建Map:
我有 List<Integer> = Arrays.of(1,2,3,4,5,6,7,8,9); 我的输出应该是 Map<Integer,Integer> 这样Map的键应该是偶数之和=2+4+6+8=20
Map的值应该是奇数之和=1+3+5+7+9=25
我的输出应该是key=20和value=25。我需要使用java8。

olhwl3o2

olhwl3o21#

你可以这样做:

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}
    }
}

您也可以使用java streams,但这将在列表上迭代两次:

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}
    }
}

相关问题