java - 使用 Java 流将 Java 列表转换为另一个列表
问题描述
我有一个班级测试
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
为新的,每个代码 A、B、C... 到它自己的对象。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
as 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
}
推荐阅读
- python - 执行python后cmd窗口不关闭
- javascript - Threejs——加载模型并让它们旋转/移动到位
- visual-studio-code - 为什么我的 VSC 的 Intellisense 代码完成预测“.toLoweCase()”方法而不是“.substring()”
- django - 如何在呈现之前过滤模型查询集
- api - 如何使用 discord api 发送图像消息?
- nginx - Nginx:需要 http_name 域的映射函数
- reactjs - Uploading a CSV and Creating a chart - react
- javascript - 将特定颜色交换为图像 javascript
- javascript - document.getElementById 没有在我的 React 组件中动态更改样式
- r - 如果在函数中,evalq 如何在正确的环境中获取文件