如何将未过滤的数据保留在 Java 8 Streaming API 的集合中?

how to keep the unfiltered data in the collection in Java 8 Streaming API?

我的输入序列是:[1,2,3,4,5]

结果应该是:[1,12,3,14,5]

即偶数增加 10,但奇数保持不变。

这是我尝试过的:

public static List<Integer> incrementEvenNumbers(List<Integer> arrays){
        List<Integer> temp = 
          arrays.stream()
                .filter(x->x%2==0)
                .map(i -> i+10)
                .collect(Collectors.toList());
        return temp;
    }

当我调用这个方法时,

System.out.println(incrementEvenNumbers(Arrays.asList(1,2,3,4,5)));

我得到 [12, 14]。我想知道如何包含不是 filtered 的值,但不应该为它应用 map

您可以将三元运算符与 map 一起使用,这样您应用的函数要么是奇数的恒等式,要么是将值递增 10 的偶数:

 List<Integer> temp = arrays.stream()
                            .map(i -> i % 2 == 0 ? i+10 : i)
                            .collect(Collectors.toList());

如您所见,问题是过滤器将删除元素,因此当调用终端操作时,它们将被谓词过滤。

请注意,如果您不关心就地修改列表,您可以直接使用 replaceAll,因为您正在执行从类型 T 到 T 的映射。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.replaceAll(i -> i % 2 == 0 ? i+10 : i); //[1, 12, 3, 14, 5]