如何将未过滤的数据保留在 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]
我的输入序列是:[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]