Удалить все элементы из списка после и до определенного индекса - PullRequest
3 голосов
/ 29 марта 2019

Есть ли в Java способ удалить ВСЕ элементы из списка, кроме указанного индекса? Предположим, что у нас есть:

List<String> foo = new ArrayList<>();
foo.add("foo0");
foo.add("foo1");
foo.add("foo2");
foo.add("foo3");
foo.add("foo4");

И я хочу сохранить ТОЛЬКО элемент с индексом 2 (foo2), все остальные строки должны быть удалены.

Мне нужен такой метод, как: учитывая список строк и заданный индекс, удалить все элементы этого списка до и после индекса Как мне достичь этой цели?

Приветствия

Ответы [ 6 ]

1 голос
/ 29 марта 2019

Вы можете сделать что-то вроде:

Arrays.asList(foo.get(2));

или

Collections.singletonList(foo.get(2))

Итак, в качестве метода вы можете реализовать:

// Returns a fixed-size list ..
public List<String> subList(List<String> list, int index) {
    return Arrays.asList(list.get(index));
}

или

public List<String> subList(List<String> list, int index) {
        return Collections.singletonList(list.get(index));
    }

или

public List<String> subList(List<String> list, int index) {
    return list.subList(index, ++index);
}
1 голос
/ 29 марта 2019
foo.subList(0, 2).clear(); // after execution of that line Your index 2 object  is on index 0.
foo.subList(1, foo.size()).clear();

Теперь ваш список foo содержит только один элемент, который изначально был с индексом 2.

Обновлено:

public void RemoveAllExceptIndex(List<String> foo,int index) {
    foo.subList(0, index).clear();
    foo.subList(1, foo.size()).clear();
}
0 голосов
/ 29 марта 2019

В Java-8 вы можете сделать, как показано ниже:

    List<String> li = Arrays.asList("foo0", "foo1", "foo2", "foo3");
    List<String> finalList = li.stream().filter(s -> s.compareTo("foo2") == 0).findAny() ;
    System.out.println(finalList);

Список -> Поток -> Apply_Filter -> Collect_to_new_List

s.compareTo("foo2") == 0, гарантирует, что только foo2 пройдет filter().

0 голосов
/ 29 марта 2019

Вы можете сделать что-то подобное, чтобы сохранить старый список.

foo.retainAll(Collections.singleton(foo.get(2)));
0 голосов
/ 29 марта 2019
List<String> list2 = Arrays.asList(foo.get(2));
// you can keep foo list or empty it later.
0 голосов
/ 29 марта 2019

Что по этому поводу:

foo = foo.subList(2, 3);

Превращенный в метод, он будет выглядеть так:

public List<String> subList(List<String> list, int index)
{
    return list.subList(index, index + 1);
}

Или, если вы предпочитаете не переназначать исходный список:

public void subList(List<String> list, int index)
{
  String elm;
  elm = list.get(index);
  list.clear();
  list.add(elm);
}
...