将嵌套列表元素设置并获取到单个列表中

时间:2019-02-13 19:36:17

标签: java

我想将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]。

2 个答案:

答案 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())