gpt4 book ai didi

java - 将 DTO 转换为域模型,然后使用 lambda 返回

转载 作者:行者123 更新时间:2023-12-02 20:57:56 24 4
gpt4 key购买 nike

我是Java新手,所以我想问你是否存在一些通过lambda将一种类型对象转换为另一种类型对象的漂亮解决方案?

我有服务功能:

public List<MyObjectDto> findAll() {
List<MyObject> list = repository.findAll();
return list.someMagicToConvertToDtoObjectsInList();
}

有什么想法吗?

最佳答案

这里没有什么魔力,但您可以流式传输列表,然后实现 map 函数以从域表示转换为 DTO 表示。

例如,给定一个具有 id、firstName、lastName 的域对象和一个具有 id、name 的 DTO(其中 name 是一个串联firstNamelastName)以下代码...

List<MyObject> domain = new ArrayList<>();
domain.add(new MyObject(1, "John", "Smith"));
domain.add(new MyObject(1, "Bob", "Bailey"));

// using the verbose statement of function (rahter than a lambda)
// to make it easier to see how the map function works
List<MyDto> asDto = domain.stream().map(new Function<MyObject, MyDto>() {
@Override
public MyDto apply(MyObject s) {
// a simple mapping from domain to dto
return new MyDto(s.getId(), s.getFirstName() + " " + s.getLastName());
}
}).collect(Collectors.toList());

System.out.println(asDto);

...打印出:

[
MyDto{id=1, name='John Smith'},
MyDto{id=1, name='Bob Bailey'}
]

当然,在使用 stream() 时,上面对匿名类的使用看起来有点不合适,所以这里是使用 lambda 表达的相同代码:

List<MyDto> asDto = domain.stream().map(
s -> new MyDto(s.getId(), s.getFirstName() + " " + s.getLastName())
).collect(Collectors.toList());

关于java - 将 DTO 转换为域模型,然后使用 lambda 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47121165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com