Java integer ArrayList返回特定范围内的元素

时间:2011-09-14 10:06:49

标签: java search filter arraylist

我有一个整数

的java ArrayList
ArrayList <Integer> ageList  = new ArrayList <Integer>();

我在这个arrayList中有一些整数值。我想创建一个新的ArrayList,其中包含上面arrayList中传递条件的所有元素,例如25到35之间的值。即如果我的ageList包含值

  

{12,234,45,33,28,56,27}

我的newList应该包含

  

{33,28,27}

我怎样才能做到这一点?

注意:我从目标C背景来到java,在那里我使用NSPredicate来轻松地做这样的事情。在java中有类似的方法吗?

7 个答案:

答案 0 :(得分:7)

标准API中没有“过滤器”功能。 (但是在GuavaApache Commons中。)您必须创建一个新列表,遍历原始列表并手动将范围25-35中的元素添加到新列表中。

如果您无意保留原始列表,可以使用IteratorIterator.remove方法删除元素超出范围。

如果您的列表中没有重复项,则可以使用TreeSet,在这种情况下,您可以使用headSet / tailSet获取特定范围内的所有元素。

相关问题:(实际上甚至可能重复)

答案 1 :(得分:6)

好吧,Guava你可以写:

Iterable<Integer> filtered = Iterables.filter(list, new Predicate<Integer>() {
    @Override public boolean apply(Integer value) {
        return value >= 25 && value <= 35;
    }
});
List<Integer> newList = Lists.newArrayList(filtered);

答案 2 :(得分:5)

您可以使用foreach循环

List<Integer> newList = new ArrayList<Integer>();
for (Integer value : ageList) {
    if (value >= 25 && value <= 35) {
        newList.add(value);
    }
}

答案 3 :(得分:4)

试试这个:

ArrayList<Integer> newList = new ArrayList<Integer>(ageList);
for (Iterator<Integer> it = newList.iterator(); it.hasNext();) {
    int n = it.next();
    if (n < 25 || n > 35)
      it.remove();
}

答案 4 :(得分:1)

java [AFAIK]中没有内置功能。

步骤可以是:

  1. 循环遍历ageList。
  2. 检查条件。
  3. 如果条件成功,则将该元素添加到新列表中,否则不执行任何操作。
  4. 示例代码:

        List<Integer> ageList = new ArrayList<Integer>();
        //-- add data in ageList
    
        List<Integer> newList = new ArrayList<Integer>();
        for (Integer integer : ageList) {
            if(integer >= 25 && integer <= 35)
                newList.add(integer);
        }
    

答案 5 :(得分:1)

标准JCF无法实现。你必须迭代。

考虑使用番石榴。它有这样的功能。

http://code.google.com/p/guava-libraries/

答案 6 :(得分:0)

迭代它并添加匹配的那些?这是3行代码... 4包括新的ArrayList declration。