2015-04-01 43 views
0

我有興趣問題。有一個抽象類,它將被子類擴展。 在抽象類有以下方法:Java - 不是匿名比較器模擬從集合中選擇元素

public abstract class MyAbstractClass { 
    protected List<MyObject> findSpecificObjects(List<MyObject> objectsToSelectFrom, List<MyObject> objectsToCompare) { 
     List<MyObject> selected = new ArrayList<MyObject>(); 
     //there I need to select elements from objectsToSelectFrom 
     //using MyComparatorAnalogue with objectsToCompare 
     return selected; 
    } 

    protected class MyComparatorAnalogue implements ??? { 
     /*this comparator analogue should have an access to objectsToCompare 
     it must select elements from objectsToSelectFrom with property myProperty=someValue, where someValue - value that no one element from objectsToCompare have in the same property myProperty 
     */ 
    } 
} 

爲什麼我應該這樣做這樣一個奇怪的方式 - 因爲我需要能夠覆蓋MyComparator在子類中。有什麼辦法可以做我想做的事嗎?我看了一下Apache Commons Collections,但在這種情況下沒有找到任何可以幫助我的東西。

例如:

objectsToSelectFrom = {[key=Michael,value=23],[key=Luis,value=44],[key=Andrew,value=26]} 
objectsToCompare = {[key=John,value=23],[key=Luis,value=44]} 

假設myPropertyvalue屬性MyComparatorAnalogue應該選擇[key=Andrew,value=26]元件。

希望我可以用它來描述它。謝謝。

+0

你想過濾一個whilelist的'List '嗎? – 2015-04-01 07:29:51

+0

是的,類似的東西。但objectsToSelectFrom和objectToCompare中的對象不相同,它們只具有(或不具有)相同的myProperty值。 – 2015-04-01 07:38:42

回答

1

使用Java 8和流,你可以做這樣的事情。

List<MyObject> l = new ArrayList<>(); 
    l.add(new MyObject("foo", "FOO")); 
    l.add(new MyObject("bar", "BAR")); 
    l.add(new MyObject("baz", "BAZ")); 

    List<MyObject> whitelist = new ArrayList<>(); 
    whitelist.add(new MyObject("other bar", "BAR")); 

    Predicate<? super MyObject> inWhitelist = (MyObject o) -> { 
     return whitelist.stream().anyMatch((p) -> 
      o.getValue().equals(p.getValue())); 
    }; 

    List<MyObject> filtered = 
     l.stream().filter(inWhitelist).collect(Collectors.toList()); 

現在filtered包含具有相同valueMyObject("other bar", "BAR")MyObject("bar", "BAR")

+0

我必須使用Java 6 :( – 2015-04-01 07:43:13

+0

Java 6已被棄用 – 2015-04-01 07:44:12

+0

是的,但是我在Java 7+上運行的項目中的一些部分不要問怎麼和爲什麼 - 我不需要知道:) – 2015-04-01 07:46:52