如何使用流将对象列表转换为另一个对象列表?

18

下面的代码片段是没有使用lambda表达式实现的。

如何使用lambda表达式实现相同的功能?

public class Java8EmpTest {
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        List<Emp> empInList = Arrays.asList(new Emp(1, 100), new Emp(2, 200), new Emp(3, 300));
        List<Emp> afterSalayHikeInJava7 = new ArrayList<>();
        // old way
        for (Emp emp : empInList) {
            afterSalayHikeInJava7.add(new Emp(emp.getId(), emp.getSalary() * 100));
        }
        afterSalayHikeInJava7.stream()
                .forEach(s -> System.out.println("Id :" + s.getId() + " Salary :" + s.getSalary()));
    }
}

class Emp {
    private int id;
    private int salary;

    public int getId() {
        return id;
    }

    Emp(int id, int salary) {
        this.id = id;
        this.salary = salary;
    }

    public int getSalary() {
        return salary;
    }
}

4
使用.map()... - Oliver Charlesworth
.map() - 可以帮助将一种类型转换为另一种类型。如果我错了,请纠正我。 - Learn Hadoop
2个回答

32

使用流API中的map()方法并收集结果的简单用法:

  List<Emp> employe = Arrays.asList(new Emp(1, 100), new Emp(2, 200), new Emp(3, 300));
  List<Emp> employeRise = employe.stream()
                                 .map(emp -> new Emp(emp.getId(), emp.getSalary * 100))
                                 .collect(Collectors.toList());
  employeRise.stream()
            .forEach(s -> System.out.println("Id :" + s.getId() + " Salary :" + s.getSalary()));

10

将输入的List中的每个Emp映射到一个新的Emp,然后使用collect()方法将其收集到一个List中:

List<Emp> afterSalayHike = 
    empInList.stream()
             .map(emp->new Emp(emp.getId(), emp.getSalary() * 100))
             .collect(Collectors.toList());

谢谢@Eran。太好了。由于我是新手并且正在学习,我会发布更多问题以获得澄清。 - Learn Hadoop
抱歉离题了,但看起来很有趣。如果您正在使用Java 9 flatMap(),它会是什么样子? - Nikolay Hristov
@NikolaiHristov flatMap() 在 Java 8 中也存在,但是为什么你要在这里使用 flatMap() 呢? - Eran
没关系,@Eran。我在寻找使用flatMap的例子时遇到了这个问题,我不知道它在Java 8中是可用的。 - Nikolay Hristov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接