3 回答
TA贡献1827条经验 获得超9个赞
您可以使用Stream.mapas 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
}
TA贡献1821条经验 获得超6个赞
您可以将其简化为:
List<Test> copy = list.stream() .map(e -> Arrays.stream(e.codes.split("")) .map(c -> new Test(c, e.otherField)) .collect(Collectors.toList())) .findAny().orElse(...);
它将流过给定的列表,然后流过Array
yield fromsplit()
并映射到一个新Test
对象并将其收集到一个List
. 它通过 检索它findAny()
,它返回一个Optional<List<Test>>
,所以我建议使用orElse
它来检索默认值。
TA贡献1877条经验 获得超6个赞
您可以使用一个map函数,然后flatMap它就像这样:
List<String> testList = Arrays.asList("one,two,three,four", "five", "six", "seven",
"eight, nine", "ten");
List<String> reMappedList = testList.stream()
.map(s -> {
String[] array = s.split(",");
return Arrays.asList(array);
})
.flatMap(List::stream)
.collect(Collectors.toList());
System.out.println(reMappedList);
添加回答
举报