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.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
}