下面是對象結構 - A
謂詞鏈接問題
- 類有類的集合
B
- 類
B
具有一對一的映射與類C
- 我有一個謂詞在
C
定義P
要求:返回的列表B
其中至少有C
的謂詞P
返回true
的元素之一。
我目前的解決方案有一個for循環。我想知道是否可以在不使用for循環的情況下完成。
下面是對象結構 - A
謂詞鏈接問題
B
B
具有一對一的映射與類C
C
定義P
要求:返回的列表B
其中至少有C
的謂詞P
返回true
的元素之一。
我目前的解決方案有一個for循環。我想知道是否可以在不使用for循環的情況下完成。
如果我正確地理解了這個......你不能只是創建一個謂詞B來調用謂詞C嗎?
即B中......
new Predicate<B>() {
@Override
public boolean apply(B record) {
return new PredicateOverC().apply(record.getC())
}
}
,然後在你可以只使用Collections2.filter在B的收集和這個新謂詞?
爲什麼定義Predicate的位置很重要?你的意思是它定義爲on C?除了我使用Iterables.filter()和構成謂語,而不是使用Collections2的,但想法是一樣
// 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)。我也可能會在這個問題上丟失一些東西...
實現自定義比較? – dhblah 2011-05-25 21:35:29
你能舉一個你當前'for'循環解決方案的例子嗎?我不知道我跟着你。 – ColinD 2011-05-25 21:49:04