我有一个整数
的java ArrayListArrayList <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中有类似的方法吗?
答案 0 :(得分:7)
标准API中没有“过滤器”功能。 (但是在Guava和Apache Commons中。)您必须创建一个新列表,遍历原始列表并手动将范围25-35中的元素添加到新列表中。
如果您无意保留原始列表,可以使用Iterator
和Iterator.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]中没有内置功能。
步骤可以是:
示例代码:
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)
答案 6 :(得分:0)
迭代它并添加匹配的那些?这是3行代码... 4包括新的ArrayList declration。