とを使っMatchers.allOf
てロジックを表現できるかもしれません。Matchers.anyOf
Matchers.not
The Hamcrest チュートリアルを確認してください。
論理的
allOf - すべてのマッチャーが一致する場合に一致し、短絡 (Java の && など)
anyOf - いずれかのマッチャーが一致する場合に一致し、短絡 (Java || など)
not - ラップされたマッチャーが一致しない場合に一致し、その逆も同様です
簡単なサンプル:
import org.hamcrest.Matchers;
import java.util.ArrayList;
import java.util.List;
import static ch.lambdaj.Lambda.having;
import static ch.lambdaj.Lambda.on;
import static ch.lambdaj.Lambda.select;
public class TestLambdaJ {
public static void main(String[] args) {
List<Order> orders = new ArrayList<>();
Order order1 = new Order();
order1.addItem("Apple");
order1.addItem("Banana");
order1.addItem("Orange");
orders.add(order1);
Order order2 = new Order();
order2.addItem("Apple");
order2.addItem("Cherry");
order2.addItem("Strawberry");
orders.add(order2);
Order order3 = new Order();
order3.addItem("Olive");
order3.addItem("Banana");
order3.addItem("Strawberry");
orders.add(order3);
List<Order> ordersWithApple = select(orders,
having(on(Order.class).getItems(),
Matchers.allOf(
Matchers.hasItem("Apple"),
Matchers.hasItem("Banana"))));
}
}
class Order {
List<String> items = new ArrayList<>();
public void addItem(String item) {
items.add(item);
}
public List<String> getItems() {
return items;
}
}