Java 8:使用lambda表达式修改流中的特定元素

And*_*llo 3 java lambda java-8 java-stream

我需要修改int上的列表,如下所示:

  • 每个元素== 10都需要加倍

这是我的尝试:

list.stream()
            .filter(val -> val.getValue() == 10)
            .map(val -> {
                val.doubleValue();
                return val;
            })
            .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

问题是我正在过滤元素,而我想保留所有元素,只需修改那些== 0.

编辑:列表由元素组成MyType,定义如下:

public class MyType {

    private int val;

    public MyType(int v){
        this.val = v;
    }

    public void doubleVal(){
        val*val;
    }

    public int getValue(){
        return val;
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

Era*_*ran 8

不要用filter.将所有逻辑放入map:

list.stream()
    .map(val -> val == 10 ? 2*val : val)
    .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

编辑:在您澄清列表的元素是Integers 后,我简化了代码.请注意,原件List保持不变.