java如何使用stream lambdas将对象列表(包括它们的集合成员)映射到另一个具有Set as成员的对象?
下列各项的清单:
Class1
String string1
String string2
List<Class3> list1
映射到多个文件的列表:
Class2
String copyOfString1
String copyOfString2
Set<class4> copyOfList1
编辑: 类3包含我要复制到类4字符串成员的字符串成员
# 1 楼答案
这里的问题是您想在哪里将列表转换为集合, 可以在映射到Class4的Class3之前和之后进行转换
因此,这里的斗争是,如果您想从列表中创建集,然后将其转换为集,或者首先应用从类别3到类别4的转换。这一点很重要,因为列表可以包含重复的值,其中集合只包含唯一的值。将
List<Class3>
到Set<Class3>
作为第一个操作将取决于类3对象的相等性。将List<Class4>
设为Set<Class4>
将检查为类4实现的相等性如果您不想显式地声明映射方法,那么总是需要对象之间的小映射器,例如使用复制构造函数
Class4(Class3) {...}
下面是一个例子:
@Data
注释来自Lombok库,它为我创建了setter、getter和toString这个的输出应该类似于:
编辑: 你仍然可以这样做:
但仅仅为了实现这种语法而创建单个对象的列表会降低性能
编辑2:
我飞走了一点,在
Class1
和Class2
之间创建了映射器,您正在寻找的可能是这样的:或者与您使用的变量名更相关的内容:
编辑3(或4…): 带有Class1到Class2对象列表的示例
以及lambdas内部带有mapper的示例:
好了,现在是凌晨1点,我喝醉了,晚安