使用 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()
)
Apache Commons
如果你不能使用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
Sample
- 如果需要将结果键入为 ,则需要额外的代码(如我的示例所示)
Sample[]
奖励:一篇很好的博客文章,讨论如何在列表中查找元素。