假设我有三个不同的字符串类型数据列表,这些数据是从一个表(不同的列)获取的。现在,我想把这三个列表像表数据一样添加到第三个列表中。请建议一下。
List<String> allData = new LinkedList<>();
List<String> list1 = new LinkedList<>();
List<String> list2 = new LinkedList<>();
List<String> list3 = new LinkedList<>();
list1.add("1");
list1.add("2");
list2.add("3");
list2.add("4");
list3.add("5");
list3.add("6");
发布于 2022-09-24 14:43:18
对每个文本进行迭代,并收集一个新的
List<String> list1 = List.of("1", "2");
List<String> list2 = List.of("3", "4");
List<String> list3 = List.of("5", "6");
List<List<String>> allLists = List.of(list1, list2, list3);
List<List<String>> allData = new ArrayList<>();
for (int i = 0; i < list1.size(); i++) {
List<String> tmp = new ArrayList<>();
for (List<String> someList : allLists) {
tmp.add(someList.get(i));
}
allData.add(tmp);
}
System.out.println(allData);
// [[1, 3, 5], [2, 4, 6]]
发布于 2022-09-24 14:55:16
假设所有列表都是相同大小的,则可以将任意数量的列表组合在使用Stream的相同索引下连接元素。
为此,您可以在索引上创建一个流,然后为每个索引创建一个与该索引对应的列表元素流。
使用Java16 toList()
或collect(Collectors.toList())
将每个嵌套流收集到一个列表中,然后将所有列表收集到一个嵌套列表中。
下面是一个通用实现:
@SafeVarargs
public static <T> List<List<T>> joinAllByIndex(List<T>... lists) {
if (lists.length == 0) return Collections.emptyList();
return IntStream.range(0, lists[0].size())
.mapToObj(i -> Arrays.stream(lists)
.map(list -> list.get(i))
.toList())
.toList(); // for Java 16+ or collect(Collectors.toList()) for earlier versions
}
https://stackoverflow.com/questions/73837939
复制相似问题