我有一个类Accumulation
,如下所示
public class Accumulation implements Serializable {
private static final long serialVersionUID = 1L;
private String mobileNo;
private String address;
private int count;
--
getter
setter
}
我通过
从我的存储库中获取数据List<Accumulation> accumulations = repository.getAccumulation();
现在,示例List<Accumulation>
累积包含5条记录。
First records : 123, Test1, 2
Second records : 123, Test1, 2
Third records : 123, Test1, 2
Fourth records : 123, Test1, 1
Fifth records : 123, Test1, 2
我们可以通过以下代码获得总计数。
int totalCount = accumulations.stream().mapToInt(Accumulation::getCount).sum();
所以从上面的列表我们可以得到总计数是:: 9
我想要什么:我想只获得8个计数记录。
例如:如果我们只获得4条记录(第一,第二,第三,第五),则从5条记录中得到8条记录。
如何实现上述逻辑?我找不到任何东西。
答案 0 :(得分:1)
如果您希望列表很短,则可以强制搜索所有累积组合。以下代码段使用BitSet
类来避免进行手动位掩码操作:
import static java.util.stream.Collectors.toList;
Optional<List<Accumulation>> result = LongStream.range(0, 1L << accumulations.size())
.mapToObj(bits -> BitSet.valueOf(new long[] {bits}))
.filter(bits -> 8 == bits.stream()
.map(i -> accumulations.get(i).getCount())
.sum()
)
.map(bits -> bits.stream()
.mapToObj(accumulations::get)
.collect(toList())
)
.findFirst();
答案 1 :(得分:0)