gpt4 book ai didi

java - 根据成员变量或映射函数返回子列表

转载 作者:行者123 更新时间:2023-11-29 10:05:24 25 4
gpt4 key购买 nike

我有一个 pojo 的列表 List<Pojo> pojoList ;和 pojo.getColour();返回一个枚举实例。

我想这样做:

List<Pojo> newlist = new ArrayList<Pojo>();
for(Pojo pojo:pojoList){
if(pojo.getColour() == Colour.Red){
newList.add(pojo);
}
}

我可以看到自己对其他类型的列表使用类似的函数,所以与其重复大量代码,不如让它们成为通用和/或功能性的方法?这样我就可以根据不同的规则创建不同类型的子列表?

最佳答案

首先,我应该注意,如果您只想要一个新的 ArrayList包含匹配的元素,你在你的例子中做的方式就很好。在 Java 拥有 lambda 表达式之前,您不会让它变得更简单或更好看。

因为你用 标记了它,以下是您可以使用 Guava 执行此操作的方法。您基本上是在过滤谓词 ( == Color.Red) 和函数 (pojo.getColour()) 的组合的原始列表。所以如果你有一个静态的 final Function<Pojo, Colour>称为 COLOURPojo (像这样):

public static final Function<Pojo, Colour> COLOUR =
new Function<Pojo, Colour>() {
@Override public Colour apply(Pojo input) {
return input.getColour();
}
};

您可以像这样创建该组合:

Predicate<Pojo> isRedPojo = Predicates.compose(
Predicates.equalTo(Colour.Red), Pojo.COLOUR);

然后您可以创建原始列表的过滤 View :

Iterable<Pojo> redPojos = Iterables.filter(pojoList, isRedPojo);

然后您可以将过滤后的 View 复制到 ArrayList 中如果你想:

List<Pojo> copy = Lists.newArrayList(redPojos);

关于java - 根据成员变量或映射函数返回子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9790567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com