Копирование последних 3 элементов ArrayList в список <String> - PullRequest
2 голосов
/ 21 апреля 2020

Я сейчас пытаюсь безрезультатно скопировать последние 3 элемента каждого итеративного пути в lastEdgePath. Кроме того, lastEdgePath должен быть типа List < String >. Список Arraylists allPaths работает и для этого вопроса следует предполагать, что он заполнен. Это то, что я пробовал, в настоящее время происходит то, что последние 3 элемента добавляются как 1 в lastEdgePath, в то время как мне нужно, чтобы они были добавлены как 3 различных элемента, которые они есть. Пример: если путь [1,2,3,4,5,6] lastEdgePath станет [4,5,6]

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

for(ArrayList<String> path : allPaths){
      List<String> lastEdgePath = Collections.singletonList(path.get(path.size() - 3) + path.get(path.size() - 2) + path.get(path.size() - 1));
}

Ответы [ 2 ]

4 голосов
/ 21 апреля 2020

Просто используйте метод subList.

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

for(ArrayList<String> path : allPaths){
      List<String> lastEdgePath = path.subList(path.size() - 3, path.size());
}

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

4 голосов
/ 21 апреля 2020

Использовать subList:

List<String> lastThreeThings = path.subList(path.size() - 3, path.size());

Обратите внимание, что это представление базового списка, поэтому изменения в lastThreeThings отражаются в path. Если вам нужен отдельный список, скопируйте его:

List<String> lastThreeThings = new ArrayList<>(path.subList(path.size() - 3, path.size()));

Также обратите внимание, что он не обрабатывает список короче, чем 3 элемента. Если это возможно, используйте Math.max(0, path.size() - 3) в качестве начального индекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...