除了给定索引之外,Java中是否有任何方法可以从List中删除所有元素?让我们说:
List<String> foo = new ArrayList<>();
foo.add("foo0");
foo.add("foo1");
foo.add("foo2");
foo.add("foo3");
foo.add("foo4");
并且我想仅保留索引为2(foo2)的元素,必须删除所有其他字符串。
我需要一个方法:给定一个字符串列表和一个给定的索引,删除索引前后该列表的所有元素如何实现这个目标?
干杯
你可以这样做:
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);
}
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();
}
List<String> list2 = Arrays.asList(foo.get(2));
// you can keep foo list or empty it later.
那这个呢:
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);
}
您可以执行此类操作以保留旧列表。
foo.retainAll(Collections.singleton(foo.get(2)));
在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()
。