java - 在 Java 8 中将 List<SomeObject> 转换为 List<AnotherObject>

标签 java list java-8 java-stream

我正在尝试将一个对象列表转换为另一个对象列表。但我正在尝试通过具有更高可读性的 java8 方式选择使用或不使用流的最佳方式。

假设我有如下列表:

List<SomeObject> list = new ArrayList<SomeObject>;

一些对象:

public class SomeObject{
  private String var1;
  private String var2;
  private String var3;
  private String var4;
  //getters and setters
}

另一个对象:

public class AnotherObject{
  private String var1;
  private List<String> var2;
  //getters and setters
}

但是在另一个对象中,如果多个对象的 var1 相同,我想将 var2 值保存在 String 列表中。示例如下:

SomeObject so = new SomeObject();
so.setVar1("key1");
so.setVar2("value1");
SomeObject so1 = new SomeObject();
so1.setVar1("key2");
so1.setVar2("value2"); 
SomeObject so2 = new SomeObject();
so2.setVar1("key2");
so2.setVar2("value3");    
list.add(so);
list.add(so1);
list.add(so2);

现在从上面的列表中,我想创建仅包含 var1 和 var2 的 AnotherObject 列表,如果两个 SoemObject 中的 var1 相同,那么我想要列表中的 var2 值并将其保存为 var1。

任何建议都会受到赞赏和帮助。

最佳答案

你似乎在寻找基于 var1groupingBy 然后 mappingvar2 作为列表值。这可以这样做:

List<AnotherObject> anotherList = list.stream()
        .collect(Collectors.groupingBy(
                SomeObject::getVar1, Collectors.mapping(
                        SomeObject::getVar2, Collectors.toList())))
        .entrySet().stream()
        .map(e -> new AnotherObject(e.getKey(), e.getValue()))
        .collect(Collectors.toList());

关于java - 在 Java 8 中将 List<SomeObject> 转换为 List<AnotherObject>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56937202/

相关文章:

java - 将同名 xml 节点添加到 arrayList

java - Thread.sleep() 是否使执行停止以获得准确的时间间隔

python - 将列表中的每个项目添加到 FASTA 文件中特定行的末尾

java - 在 ant build 中加速 junit 测试

java - MethodInterceptor 重试 HttpInvoker 调用

python - 循环嵌套列表字典以计算键的出现次数

python - python append 到列表是如何工作的?

java - 将双foreach和if语句重构为java 8解决方案

java - IntStream.empty() 方法的目的是什么?

java - 将二维字符数组转换为一维字符串数组