Как динамически сделать фильтрацию в Java 8?
Я знаю в Java 8, я могу сделать фильтрацию так:
List<User> olderUsers = users.stream().filter(u -> u.age > 30).collect(Collectors.toList());
Но что, если у меня есть коллекция и полдюжины критериев фильтрации, и я хочу проверить комбинацию критериев?
Например, у меня есть коллекция объектов и следующие критерии:
<1> Size
<2> Weight
<3> Length
<4> Top 50% by a certain order
<5> Top 20% by a another certain ratio
<6> True or false by yet another criteria
И я хочу проверить комбинацию вышеуказанных критериев, что-то вроде:
<1> -> <2> -> <3> -> <4> -> <5>
<1> -> <2> -> <3> -> <5> -> <4>
<1> -> <2> -> <5> -> <4> -> <3>
...
<1> -> <5> -> <3> -> <4> -> <2>
<3> -> <2> -> <1> -> <4> -> <5>
...
<5> -> <4> -> <3> -> <3> -> <1>
Если каждый заказ на тестирование может давать разные результаты, как написать цикл для автоматической фильтрации всех комбинаций?
Я могу подумать о том, чтобы использовать другой метод, который генерирует порядок тестирования, например:
int[][] getTestOrder(int criteriaCount)
{
...
}
So if the criteriaCount is 2, it will return : {{1,2},{2,1}}
If the criteriaCount is 3, it will return : {{1,2,3},{1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1}}
...
Но тогда как наиболее эффективно реализовать его с помощью механизма фильтрации в кратких выражениях, который поставляется с Java 8?