Я знаю в 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?