加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

使用Java流将Java列表转换为另一个

发布时间:2020-12-14 19:25:11 所属栏目:Java 来源:网络整理
导读:我有一个课程测试 public class Test{ String codes; String field 1; .... String field n;} 我有一个测试对象列表 ListTest objects,code can be one or more with a comma separatedtestObj1("A","field1".."fieldn")testObj2("B,C",...)testObj3("D,E,F"

我有一个课程测试

public class Test{
  String codes;
  String field 1;
  ....
  String field n;
}

我有一个测试对象列表

List<Test> objects,code can be one or more with a comma separated
testObj1("A","field1".."fieldn")
testObj2("B,C",...)
testObj3("D,E,F",....)
testObj4("G",...)

通过保留其余字段,尝试将每个代码A,B,C …将此list1转换为新的list2,并将其转换为自己的对象.

List<Test>
testObj1("A",....)
testObj2("B",....)
testObj3("C",....)

list1.stream().collect(Collectors.toList())

我使用循环(Sudo代码)实现了这一点,但是正在寻找更好的逻辑

for(loop thru list1){
  String[] codesArr = testObj1.codes.split(",");
  for (String code : codesArr) {
    //Create new Obj 
    Test obj = new Test(code,testObj1.copyotherfields);
    //Add obj to list2
  }
}
最佳答案
您可以将Stream.map与flatMap一起使用:

List<Test> finalList = list1.stream()
        .flatMap(e -> Arrays.stream(e.getCodes().split(","))
                .map(c -> new Test(c,e.getField1(),e.getFieldn())))
        .collect(Collectors.toList());

假设您的Test类将具有类似于以下实现的构造函数:

class Test {
    String codes;
    String field1;
    String fieldn;

    // would vary with the number of 'field's
    Test(String codes,String field1,String fieldn) {
        this.codes = codes;
        this.field1 = field1;
        this.fieldn = fieldn;
    }
    // getters and setters
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读