ArrayList:仅克隆其中的一些项目

时间:2012-10-27 12:51:22

标签: java


我有一个人员的ArrayList(姓名,年龄)。现在我想克隆这个ArrayList的一个子集。假设我想从中创建一个年龄> gt的人的新ArrayList。 30. 设置一个从Person读取所有属性并将其添加到新ArrayList的迭代并不太复杂。然而,我只是想知道是否有一个更“优雅”,也许更灵活,实现这一点的方式,可能实现我目前缺少的一些接口。只有一个要求:我想坚持使用基本的Java JDK API,为了这个目的,合并一个外部lib会是一种过分的做法。
谢谢 最大

4 个答案:

答案 0 :(得分:2)

我知道你说你不想使用外部库,但是如果你选择了,那么这段代码会有所帮助:

List<Person> persons = getSomePersons();
Collection<Person> greaterThan30 = Collections2.filter(persons, new Predicate<Person>() {
    public boolean apply(Person person) {
        return person.age > 30;
    }
});

它需要Guava Libraries。基本上它是一个带有类型参数的Predicate类的函数。它有一个方法“apply”,它返回你想要接受的条件。

这是人们哀叹使用Java的原因之一。没有适当的高阶函数支持。例如,在Scala中,您可以这样做:

val greaterThan30 = persons.filter(_.age > 30)

答案 1 :(得分:1)

你想要的是filter,但标准API库中没有一个实现,并且由于缺少闭包/ lambda,在{{{{{{{{ 3}}所有人都必须比在其他语言中更加冗长。但是,这可能会在Java 8中发生变化。

所以,继续做一个循环 - 这并不是说有什么东西是脏的,即使有更优雅的方式,它也最终会执行一个循环。

答案 2 :(得分:1)

这种操作应该是使用LINQ。但是,LINQ目前还没有Java版本。根据计划,它将在Java 8中。

然而,在此之前,请尝试LambdaJ http://code.google.com/p/lambdaj/

答案 3 :(得分:0)

Collections.binarySearch可以帮你解决问题。

您可以在这里找到一些例子。 Implement binary search in objects