我想将ArrayList中的某些元素设置为此格式。 [1,2,[3,4],5,[6,7,8],9]
我也尝试从上述格式中获取元素,它将所有嵌套的元素列表转换为单个元素列表。 例如[1、2、3、4、5、6、7、8、9]
当前,我正在尝试在列表中设置元素。
List<Object> list = new ArrayList<>();
List<Integer> intList = new ArrayList<>();
List<Integer> intList2 = new ArrayList<>();
intList.add(3);
intList.add(4);
intList2.add(6);
intList2.add(7);
intList2.add(8);
list.add(1);
list.add(2);
list.addAll(intList);
list.add(5);
list.addAll(intList2);
list.add(9);
在调试模式下执行上述代码后。我检查了列表,并将其存储为[1、2、3、4、5、6、7、8、9]而不是[1、2,[3、4],5,[6、7] 8],9]。
答案 0 :(得分:0)
addAll()
方法只是将参数列表中的项目一一添加。因此,您需要常规的add()
方法:
...
list.add(intList);
list.add(5);
list.add(intList2);
...
然后,如果要将其转换为单个列表,可以使用流flatMap
方法。注意:由于您需要进行List<Object>
的强制转换:
List<Integer> collect = list.stream()
.flatMap(o -> {
if (o instanceof ArrayList)
return ((ArrayList<Integer>) o).stream();
return Stream.of((Integer)o);
})
.collect(toList());
System.out.println(collect);
或者使用List<List<Integer>>
代替List<Object>
在评论中的提及方式。然后第二部分会更简洁
答案 1 :(得分:0)
如果要对整数进行操作,可以将列表的类型从List<Object>
更改为List<List<Integer>>
,然后将Integers列表添加到列表而不是单个Integer进行访问,以从中创建流list和flatMap。
List<List<Integer>> list = new ArrayList();
List<Integer> intList = new ArrayList();
List<Integer> intList2 = new ArrayList();
intList.add(3);
intList.add(4);
intList2.add(6);
intList2.add(7);
intList2.add(8);
list.add(Arrays.asList(1));
list.add(Arrays.asList(2));
list.add(intList);
list.add(Arrays.asList(5));
list.add(intList2);
list.add(Arrays.asList(9));
List<Integer> flatList = list.stream().flatMap(List::stream).collect(Collectors.toList())