Как динамически сделать фильтрацию в 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?

Ответы на вопрос(2)

Ваш ответ на вопрос