bra*_*orm 3 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==0)
.map(i -> i+10)
.collect(Collectors.toList());
return temp;
}
Run Code Online (Sandbox Code Playgroud)
当我称这种方法时,
System.out.println(incrementEvenNumbers(Arrays.asList(1,2,3,4,5)));
Run Code Online (Sandbox Code Playgroud)
我得到[12, 14]
.我想知道如何包含不filtered
渗透的值,但map
不应该应用它.
您可以使用三元运算符map
,以便您应用的函数是奇数值的标识,或者对于偶数值将值递增10的函数:
List<Integer> temp = arrays.stream()
.map(i -> i % 2 == 0 ? i+10 : i)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,问题是过滤器将删除元素,因此当调用终端操作时,它们将被谓词过滤.
请注意,如果您不在乎修改列表,可以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]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
790 次 |
最近记录: |