使用 Java 8
使用Java 8,您可以简单地将列表转换为允许您编写的流:
import java.util.List;
import java.util.stream.Collectors;
List<Sample> list = new ArrayList<Sample>();
List<Sample> result = list.stream()
.filter(a -> Objects.equals(a.value3, "three"))
.collect(Collectors.toList());
注意
a -> Objects.equals(a.value3, "three")
是一个lambda 表达式
result
是List
一个Sample
类型
- 它非常快,每次迭代都没有演员表
- 如果您的过滤器逻辑变得更重,您可以这样做
list.parallelStream()
而不是list.stream()
(阅读此)
阿帕奇公地
如果不能使用 Java 8,可以使用Apache Commons库并编写:
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
Collection result = CollectionUtils.select(list, new Predicate() {
public boolean evaluate(Object a) {
return Objects.equals(((Sample) a).value3, "three");
}
});
// If you need the results as a typed array:
Sample[] resultTyped = (Sample[]) result.toArray(new Sample[result.size()]);
注意:
- 每次迭代都有一个从
Object
to的演员表Sample
- 如果您需要将结果输入为
Sample[]
,则需要额外的代码(如我的示例所示)
奖励:一篇不错的博客文章,讨论如何在列表中查找元素。