2017-05-08 36 views
0

的謂詞行爲我有一個名稱和年齡成員變量的人類。我有兩個謂詞方法如下。List.removeIf()

static Predicate<Person> isAbove20(){ 
     return p -> p.getAge() > 20; 
    } 

    static Predicate<Person> isNameEqualTo(String name){ 
     return p -> p.getName().equals(name); 
    } 

我有一個Person和幾行代碼的列表如下。

List<Person> people = new ArrayList<>(); 
    people.add(new Person("raj", 20)); 
    people.add(new Person("bini", 15)); 
    people.add(new Person("tom", 25)); 
    people.add(new Person("rock", 12)); 

    print(people); 
    people.removeIf(Predicates.isNameEqualTo("rock").and(Predicates.isAbove20())); 
    System.out.println("**** after applying predicates ****"); 
    print(people); 

在運行這段代碼我得到的輸出

Person{name='raj', age=20} 
Person{name='bini', age=15} 
Person{name='tom', age=25} 
Person{name='rock', age=12} 
**** after applying predicates **** 
Person{name='raj', age=20} 
Person{name='bini', age=15} 
Person{name='tom', age=25} 
Person{name='rock', age=12} 

我期待它來除去2人從列表.i.e對象。岩石(用於名稱爲「石頭」)和湯姆(年齡大於20))打印清單內容

Person{name='raj', age=20} 
Person{name='bini', age=15} 

可能有人請解釋爲什麼它打印整個列表,因爲它已創建。

謝謝。

回答

3

你很困惑「和」與「或」。如果名字是搖滾年齡大於20,您的謂詞將刪除一個人。

沒有人匹配此謂詞。

+0

明白了。我認爲它會應用第一個謂詞並使用結果列表來應用第二個謂詞。感謝澄清。 – user6604211