別の使用してJavaストリームにJavaのリストを変換します

user08152017:

私は、クラスTestを持っています

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", ...)

これを変換しようとするとlist1、新たなにlist2残りのフィールドを保持することにより、独自のオブジェクトに...各コードA、B、Cと。

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

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

私は、この使用してループ(須藤コード)を達成したが、より良いロジックを探して

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.mapflatMapのように:

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
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=211831&siteId=1