我如何使用 lambda 执行此 ForEach?

How can I do this ForEach using lambda?

我有这个 foreach 可以将一些 class 解析为另一个:

public static List<MyClassParsed> getMyParsed(List<MyClassResponse> responses) {

    List<MyClassParsed> parses = new ArrayList<>();

    for (MyClassResponse response : responses) {

        var parse = MyClassParsed.builder()
                .id(response.getId())
                .name(response.getName())
                .build();

        parses.add(parse);
    }

    return detalhes;
}

我的意思是,我可以使用 responses.stream().foreach(...) 之类的东西来做到这一点吗?

您正在将列表转换为从该列表的元素派生的对象列表,因此 map 看起来是个不错的解决方案。

public static List<MyClassParsed> getMyParsed(List<MyClassResponse> responses) {
    return responses.stream()
                    .map(r -> 
                         MyClassParsed
                             .builder()
                             .id(r.getId())
                             .name(r.getName())
                             .build())
                    .collect(Collectors.toList());
}

您可以使用不同的 lambda 功能将您的列表转换为另一个列表:

一行:

List<MyClassParsed> parses = responses.stream().map(response -> MyClassParsed.builder().id(response.getId()).name(response.getName()).build()).collect(Collectors.toList());

方法参考:

public class Mapper {
    static MyClassParsed map(MyClassResponse response) {
       return MyClassParsed.builder().id(response.getId()).name(response.getName()).build();
    }
    public void getMyParsed(List<MyClassResponse> responses) {
        List<MyClassParsed> parses = responses.stream().map(Mapper::map).collect(Collectors.toList());
    }
}

函数实例:

 Function<MyClassResponse, MyClassParsed> mapper = response -> MyClassParsed.builder().id(response.getId()).name(response.getName()).build();
 List<MyClassParsed> parses = responses.stream().map(mapper).collect(Collectors.toList());