Java从集合中获取多个项目

时间:2010-02-21 15:54:46

标签: java collections filter

Java集合是否有内置方法从该集合中返回多个项目?例如,下面的列表中包含 n 元素,其中一些元素在列表中重复。我怎么能得到值=“一”的所有元素?我意识到编写自己的方法来实现这样的功能会非常容易,我只是想确保我没有错过内置的方法来实现这一点。

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

由于

4 个答案:

答案 0 :(得分:2)

Google Collections为此目的Predicates

答案 1 :(得分:2)

没有内置方法,但Apache Commons has a select method中的 CollectionUtils 会获得符合某些条件的所有元素。用法示例:

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

答案 2 :(得分:2)

在这个例子中,足以知道“one”出现在列表中的次数,您可以使用java.util.Collections.frequency(ls, "one")获得。

您也可以使用google-collections中的Multiset,并调用m.count("one"),效率会更高。

答案 3 :(得分:0)

我认为您可以使用Collection类link text的retainall方法保留此列表的元素,这些元素位于另一个列表中。在另一个列表中,您只能添加“一个”对象。

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