在Java中,除了给定索引之外,有什么方法可以从列表中删除所有元素?让我们假设我们有:
List<String> foo = new ArrayList<>();
foo.add("foo0");
foo.add("foo1");
foo.add("foo2");
foo.add("foo3");
foo.add("foo4");
我只想保留索引为2(foo2)的元素,所有其他字符串都必须删除。
我需要一个类似的方法:给定字符串列表和给定索引,删除该列表在索引之前和之后的所有元素 我如何实现这个目标?
欢呼
答案 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()
。