Начиная со списка Entry<String, Double>
Я только что нашел все комбинации с помощью следующего метода:
public static <T> Stream<List<T>> getCombinationsStream(List<T> list) {
return LongStream.range(1 , 1 << list.size())
.mapToObj(l -> bitMapToList(l, list));
}
Теперь я хочу отфильтровать полученные списки записей только для тех, у кого сумма всехего значение
entry.getValue ()
равно известному числу.
List<Entry<String, Double>> myList;
double value = 100;
//...
List<List<Entry<String, Double>>> allCombinations = Permutations.getCombinationsStream(myList)
.collect(Collectors.toList());
после этого моя цель - взять толькоСписок записей с наименьшим размером, сумма его значения которого равна моему значению (то есть 100)
пример:
/*
* allCombinatinos example
*
* [[k1=90.0],[k2=30],[k3=70],
* [k1=90.0, k2=30],[k1=90.0, k3=70],[k2=30, k3=70],
* [k1=90.0, k2=30, k3=70]]
*/
с этими списками, ожидаемый результат будет только одним списком:
//result
[k2=30, k3=70]
Я думаю, что эту проблему можно решить с помощью .filter () и других потоковых операций, но я не знаю, как это выяснить.