谓词与java8中的地图结合使用

时间:2016-10-07 18:28:45

标签: java java-8

使用Java8在地图中使用谓词是否比下面更容易/更简洁?

public static void main(String[] args) {
        List<Integer> test = new ArrayList<>();
        test.add(1);
        test.add(2);
        test.add(3);
        test.add(4);

        List<Integer> test2 = test.stream()
            .map(i -> { if (i % 2 == 0) return i; else return 0;})
            .collect(toList());

        for (int i = 0; i < test2.size(); i++)
        {
            System.out.println(test2.get(i));
        }
    }

Output:
0
2
0
4

基本上,我想只转换我的测试列表的成员,如果它们是奇数。

2 个答案:

答案 0 :(得分:2)

您的代码的简洁版本:

List<Integer> test = new ArrayList<>(Arrays.asList(1, 2, 3, 4));

List<Integer> test2 = test.stream()
                          .map(i -> i % 2 == 0 ? i : 0)
                          .collect(toList());
test2.forEach(System.out::println);

答案 1 :(得分:1)

这一个?

IntStream.rangeClosed(1, 4).map(i -> i % 2 == 0 ? i : 0).forEach(System.out::println);

或者,如果您想要流中的偶数(例如从2开始),为什么不这个呢?

IntStream.iterate(2, i -> i + 2).limit(2).forEach(System.out::println);