Добавление в список arraylist - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь добавить следующие 2, которые хранятся в tempEdges:

  1. [RoyalElephant, IS-A, Elephant]
  2. [RoyalElephant, IS-NOT -А, Серый]

, хотя я хочу, чтобы только 2 последних элемента каждого массива добавлялись в 2 массива в copiedPaths.

Массивами являются:

            public static List<ArrayList<String>> copiedPaths = new ArrayList<>();
            public static List<ArrayList<String>> tempEdges = new ArrayList<>();

А код функции:

            copiedPaths.get(0).add(tempEdges.get(0).get(1));
            copiedPaths.get(0).add(tempEdges.get(0).get(2));
            copiedPaths.get(1).add(tempEdges.get(1).get(1));
            copiedPaths.get(1).add(tempEdges.get(1).get(2));

Это не работает так, как задумано, так как оба массива добавляются с помощью IS-NOT-A , Серый вместо одного, имеющий IS-A , Слон и другой имеющий IS-NOT-A , Серый

Ответы [ 2 ]

1 голос
/ 15 апреля 2020
    ArrayList<ArrayList<String>> copiedPaths = new ArrayList<>();
    ArrayList<ArrayList<String>> tempEdges = new ArrayList<>();


    tempEdges.add(new ArrayList<>(Arrays.asList("RoyalElephant", "IS-A", "Elephant")));
    tempEdges.add(new ArrayList<>(Arrays.asList("RoyalElephant", "IS-NOT-A", "Gray")));

    copiedPaths.add(new ArrayList<>(Arrays.asList(tempEdges.get(0).get(1),tempEdges.get(0).get(2))));
    copiedPaths.add(new ArrayList<>(Arrays.asList(tempEdges.get(1).get(1),tempEdges.get(1).get(2))));


    System.out.println(Arrays.toString(copiedPaths.get(0).toArray()));
    System.out.println(Arrays.toString(copiedPaths.get(1).toArray()));

Выход: -

[IS-A, слон]

[IS-NOT-A, серый]

1 голос
/ 15 апреля 2020

Java 9+ решение:

List<List<String>> tempEdges = List.of(List.of("RoyalElephant", "IS-A", "Elephant"),
                                       List.of("RoyalElephant", "IS-NOT-A", "Gray"));

List<List<String>> copiedPaths = tempEdges.stream()
        .map(list -> list.subList(1, list.size()))
        .collect(Collectors.toList());

System.out.println(tempEdges);
System.out.println(copiedPaths);

Для Java 8+ используйте Arrays.asList вместо List.of.

Для Java 7+ используйте :

List<List<String>> tempEdges = Arrays.asList(Arrays.asList("RoyalElephant", "IS-A", "Elephant"),
                                             Arrays.asList("RoyalElephant", "IS-NOT-A", "Gray"));

List<List<String>> copiedPaths = new ArrayList<>();
for (List<String> list : tempEdges)
    copiedPaths.add(list.subList(1, list.size()));

System.out.println(tempEdges);
System.out.println(copiedPaths);

Вывод

[[RoyalElephant, IS-A, Elephant], [RoyalElephant, IS-NOT-A, Gray]]
[[IS-A, Elephant], [IS-NOT-A, Gray]]

Обратите внимание, что subList создает представление базового списка. Если исходные списки tempEdges могут измениться, вам необходимо создать копию, т.е. изменить

list.subList(1, list.size())

на

new ArrayList<>(list.subList(1, list.size()))
...