Java从集合中获取多个元素

4

Java集合中是否有内置方法可以返回该集合中的多个项?例如,下面的列表有n个元素,其中一些在列表中重复。我怎样才能获取所有值为"one"的元素?我知道编写自己的方法来实现此功能非常容易,但我只是想确保我没有错过内置的方法来做到这一点。

List<String> ls=new ArrayList<String>();
ls.add("one");
ls.add("two");
ls.add("three");
ls.add("one");
ls.add("one");

//some type of built in function????
//ls.getItems("one");
//should return elements 0,3,4

谢谢


重复https://dev59.com/8nVD5IYBdhLWcg3wAGiD - Roman
4个回答

2

虽然没有内置的方法,但是CollectionUtils中有一个选择方法select,可以获取所有符合某些条件的元素。例如:

List<String> l = new ArrayList<String>();

// add some elements...

// Get all the strings that start with the letter "e".
Collection beginsWithE = CollectionUtils.select(l, new Predicate() {
  public boolean evaluate(Object o) {
    return ((String) o).toLowerCase().startsWith("e");
  }
);

目前我看不出 Apache Collections 相比 Google Collections 有任何优势。他们停止了这个库的开发,这是主要问题。 - Roman

2

谷歌收藏库有谓词用于此目的。


2
在这个例子中,只需要知道在列表中出现“one”的次数即可,可以使用java.util.Collections.frequency(ls,"one")来获取。
你还可以使用来自google-collections的Multiset,并调用m.count("one"),这样会更加高效。

0

我认为你可以使用Collection类的retainall方法link text来保留另一个列表中存在的元素。在另一个列表中,你只需要添加"one"对象即可。

List<String> ls=new ArrayList<String>();
ls.add("one");
ls.add("two");
ls.add("three");
ls.add("one");
ls.add("one");

List<String> listToCompare = new ArrayList<String>();
listToCompare.add("one");
ls.retainAll(listToCompare);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接