在特定索引之前和之后从列表中删除所有元素

时间:2019-03-29 12:32:05

标签: java arrays arraylist java-8 indexof

在Java中,除了给定索引之外,有什么方法可以从列表中删除所有元素?让我们假设我们有:

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

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

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

欢呼

6 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分: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);
}

答案 2 :(得分: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);
}

答案 3 :(得分:0)

List<String> list2 = Arrays.asList(foo.get(2));
// you can keep foo list or empty it later.

答案 4 :(得分:0)

您可以执行以下操作来保留旧列表。

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

答案 5 :(得分: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);
  

列表-> -> 应用过滤器-> 收集到新列表

s.compareTo("foo2") == 0,确保只有foo2通过filter()