Java 8 如何在Java8流式API中保留集合中未过滤的数据?

Java 8 如何在Java8流式API中保留集合中未过滤的数据?,java-8,java-stream,Java 8,Java Stream,我的输入顺序是:[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=

我的输入顺序是:
[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;
    }

我得到了
[12,14]
。我想知道如何包含未过滤的值,但不应将
映射
应用于该值。

您可以将三元运算符与
映射
一起使用,这样您应用的函数要么是奇数值的标识,要么是将偶数值的值增加10的标识:

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

方法不错,没想到!我有一个复杂的问题(我在这里简化了奇数值)。我有一个对象列表,我必须在其中修改某些对象,并返回包含已修改和未修改对象的整个列表。我想我可以向映射传递一个谓词。
map()
函数
作为参数,但是是的。如果逻辑复杂,您可能会使用方法引用。
filter(Predicate)
函数将始终踢出谓词拒绝的值;所以只要你使用过滤器,奇数就会消失。当然,正如你在亚历克西斯的回答中所看到的,有一些方法可以实现你想要的。
 List<Integer> temp = arrays.stream()
                            .map(i -> i % 2 == 0 ? i+10 : i)
                            .collect(Collectors.toList());
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.replaceAll(i -> i % 2 == 0 ? i+10 : i); //[1, 12, 3, 14, 5]