当前位置: 首页 > 知识库问答 >
问题:

我如何使用lambda来完成这个ForEach?

乐正浩言
2023-03-14

我有这个foreach,它将某个类解析为另一个类:

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(...)这样的东西来完成这件事吗?

共有2个答案

公孙高畅
2023-03-14

您可以使用不同的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());
戚峻
2023-03-14

您正在将一个列表转换为从该列表的元素派生的对象列表,因此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());
}
 类似资料: