列表中的筛选对象排列<;列表<;进入<;字符串,双>&燃气轮机&燃气轮机;使用Java8
从列表中的筛选对象排列<;列表<;进入<;字符串,双>&燃气轮机&燃气轮机;使用Java8,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,从条目列表开始我刚刚找到了以下方法的所有组合: public static <T> Stream<List<T>> getCombinationsStream(List<T> list) { return LongStream.range(1 , 1 << list.size()) .mapToObj(l -> bitMapToList(l, list)); } 使用此列表,预期结果将只有一
条目列表开始
我刚刚找到了以下方法的所有组合:
public static <T> Stream<List<T>> getCombinationsStream(List<T> list) {
return LongStream.range(1 , 1 << list.size())
.mapToObj(l -> bitMapToList(l, list));
}
使用此列表,预期结果将只有一个列表:
//result
[k2=30, k3=70]
我认为这个问题可以通过.filter()和其他流操作来解决,但我不知道如何解决。这里有一种解决方法:
Optional<List<Entry<String, Double>>> min =
getCombinationsStream(myList)
.filter(l -> l.stream()
.mapToDouble(Map.Entry::getValue).sum() == value)
.min(Comparator.comparingInt(List::size));
可选最小值=
getCombinationsStream(myList)
.filter(l->l.stream()
.mapToDouble(Map.Entry::getValue).sum()==value)
.min(比较器.comparingit(列表::大小));
使用所述条件进行筛选,然后查找最小大小的条目列表。因此,最后,您想要一个双部分总和为所需值(100)的
列表吗?是的,您是对的
//result
[k2=30, k3=70]
Optional<List<Entry<String, Double>>> min =
getCombinationsStream(myList)
.filter(l -> l.stream()
.mapToDouble(Map.Entry::getValue).sum() == value)
.min(Comparator.comparingInt(List::size));