在特定索引之前和之前删除List中的所有元素

问题描述 投票:3回答:6

除了给定索引之外,Java中是否有任何方法可以从List中删除所有元素?让我们说:

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

并且我想仅保留索引为2(foo2)的元素,必须删除所有其他字符串。

我需要一个方法:给定一个字符串列表和一个给定的索引,删除索引前后该列表的所有元素如何实现这个目标?

干杯

java arrays arraylist java-8 indexof
6个回答
1
投票

你可以这样做:

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
投票
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
投票
List<String> list2 = Arrays.asList(foo.get(2));
// you can keep foo list or empty it later.

0
投票

那这个呢:

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);
}

0
投票

您可以执行此类操作以保留旧列表。

foo.retainAll(Collections.singleton(foo.get(2)));

0
投票

在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()

© www.soinside.com 2019 - 2024. All rights reserved.