根据自定义数据过滤列表

时间:2017-06-18 04:37:46

标签: java

我有一个类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条记录。

如何实现上述逻辑?我找不到任何东西。

2 个答案:

答案 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)

如果您想获得返回列表的子项,可以使用List.subList

获得8个元素:

ListItems.subList(0, 8);