Java 重构循环,对流产生副作用

Java 重构循环,对流产生副作用,java,lambda,java-8,Java,Lambda,Java 8,我想将Java 7代码重构为Java 8 下面是Java 7代码: List<A> aList = new ArrayList<>(); for (B b : bList) { D d = new D(b.getSomeWhat()); d.setDisabled(true); aList.add(d); } 我有一个missing返回语句错误 如何使用Java 8流编写代码?在映射中返回d: bList.stream().map(b ->

我想将Java 7代码重构为Java 8

下面是Java 7代码:

List<A> aList = new ArrayList<>();
for (B b : bList) {
    D d = new D(b.getSomeWhat());
    d.setDisabled(true);
    aList.add(d);
}
我有一个
missing返回语句
错误


如何使用Java 8流编写代码?

在映射中返回
d

bList.stream().map(b -> {
    D d = new D(b.getSomeWhat());
    d.setDisabled(true);
    return d;
}).collect(Collectors.toList());

代码中有两个问题:

  • 使用
    ()-{}
    构造需要返回语句
  • d.setDisabled(true)
    返回void
  • 你可以这样做:

        bList.stream()
            .map(B::getSomeWhat)
            .map(D::new)
            .map(d -> {
                d.setDisabled(true);
                return d;
        }).collect(Collectors.toList());
    

    添加“返回d;”在'd.setDisabled(true);'顺便提一下不要试图将整个代码重写为
    Java8
    。您所展示的代码可能不应该被触碰,如果它是那么简单的话。顺便说一句,流解决方案并不简单,只是稍微慢一点;-)将第二个
    new
    dd=new-new-D(b.getd())中删除
    您还可以将其分为两个管道步骤:第一个步骤是a
    map
    创建
    D
    s,第二个步骤是a
    peek
    ,调用
    setDisabled(true)
    。您可以通过链接
    peek
    -javadoc来代替最后的
    map
    。。。当然,在应用
    peek
    :-)之前应该阅读
        bList.stream()
            .map(B::getSomeWhat)
            .map(D::new)
            .map(d -> {
                d.setDisabled(true);
                return d;
        }).collect(Collectors.toList());