2016-08-05 16 views
-2

私は、必要な適切な値を返すために、述語の列挙型にループしようとしています。述語の列挙を反復処理するか?

は、ここで私はどうなるのかです:javaのを除いて

private Predicate<Item> isCorrectItem() { 
    for (Thing thing : Thing.values()) { 
     return item -> item.getId() == thing.getNumber(); 
    } 
} 

がループaswellの外リターンを望んでいます。ループの後にnullを返すと、私はうまく行かないでしょう。私は、2回返すことを避けるために、あるいは最初に列挙型を反復することを避けるために、何をすることができますか?もしそうでなければ、私は何を返すべきですか? ?

+0

あなたの述語にしたいことはまったく明確ではありません。それは、物のどれか*がアイテムに価値を持っているかどうかを見ることを意味していますか?すべての「物件番号」に対して 'HashSet '(または何でも)を持ちたくない理由は何ですか? –

答えて

0

それはあなたがgarnulfの答え@

private Predicate<Item> isCorrectItem() { 
    return item -> Arrays.stream(Thing.values()).anyMatch(thing -> thing.getNumber() == item.getId()); 
} 
+0

まさに私が探していたもの、ありがとう。 – andrewDev15

0

を使用することができますenum Thingで一致numberある場合Itemが正しい場合(またはTunakiの@は?)正しいですが、ちょうど文脈のために、ここであなたはおそらく何を意味するかですあなたの疑問にお答えします:

private Predicate<Item> isCorrectItem() { 
    return item -> { 
     for (Thing thing : Thing.values()) { 
      if (item.getId() == thing.getNumber()) { 
       return true; 
      } 
     } 
     return false; 
    }; 
}