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
由于
答案 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);