java - 谓词链接问题

标签 java guava

下面是对象结构-

  • A 有一个类 B 的集合
  • class B 与class C一对一映射
  • 我在 C 中定义了一个谓词 P

要求:返回 B 的列表,其中至少包含 C 的谓词 P 的元素之一 return true .

我当前的解决方案有一个 for 循环。我想知道这是否可以在不使用 for 循环的情况下完成。

最佳答案

为什么在何处定义谓词很重要?你是说它是 C 上定义的吗?

// You already have Predicate<C> defined somewhere
Predicate<C> csPredicate = new Predicate<C>() {
    public boolean apply(C c) {
        return someComputationOn(c);
    }
};

Iterables.filter(A.getIterableOfB(), 
    Predicates.compose(
        csPredicate, 
        new Function<B, C>() {
            @Override
            public C apply(B b) {
                return b.getC();
            }
}));

我的回答与 sMoZely (+1) 非常相似,除了我使用 Iterables.filter() 并编写谓词而不是使用 Collections2,但想法是相同的。我也可能在问题中遗漏了一些东西......

关于java - 谓词链接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6131208/

相关文章:

java - 根据日期范围按键过滤多图

java - 替换/添加字符串中的字符集

java - Hadoop错误,找不到类

java - Selenium 断言等于 Value1 或 Value2

java - Java StringTokenizer.countTokens() 的时间复杂度是多少

list - 代码质量/ Guava : clear and fill a final list or assign a new Immutablelist

javascript - WEBRTC 可以使用共同浏览功能吗?

java - 如何更改 JFrame 中的 java 图标

java - 在 MinMaxPriorityQueue Guava 中更改比较器

java - 如何根据条目集过滤 map 条目