我正在尝试创建两个列表的地图。第一个列表用于键,第二个列表用于分隔和分配值,其中没有匹配箱分配的值的情况将为空列表。应该像对键5的值<50、60)那样分配值,因此
sampleBins = Arrays.asList(0,10,20,30,40,50,60);
样本= Arrays.asList(5,6,55,52);
我想要具有以下键的Map:0、1、2、3、4、5、6。键1、2、3、4、6的空列表。分配给键0的5、6中的列表55和52分配给5。
现在我有这样的东西,它正在工作,但是我正在寻找更好的东西,例如,不需要sampleBins并且适合一个管道的解决方案
private Map<Integer, List<Integer>> segregateSamples(List<Double> sampleBins, List<Double> samples) {
Map<Integer, List<Integer>> segregatedSamples = sampleBins.stream()
.collect(Collectors.toMap(bin -> bin.intValue() / 10, bin -> new ArrayList<>()));
samples.stream()
.map(Double::intValue)
.collect(Collectors.groupingBy(this::binNumber))
.forEach(segregatedSamples::put);
return segregatedSamples;
}
private Integer binNumber(int value) {
return Math.floorDiv(value, 10);
}
在我看来,对样品进行分类的方法是固定的。垃圾箱的唯一区别是可以指定您感兴趣的内容。因此,首先,无需过多注意垃圾箱。
Map<Integer, List<Integer>> segregateSamples(List<Integer> sampleBins, List<Integer> samples) {
Map<Integer, List<Integer>> groupedSamples = samples.stream().collect(Collectors.groupingBy(x -> 10 * x / 10));
return sampleBins.stream().collect(Collectors.toMap(Function.identity(), b ->
groupedSamples.getOrDefault(b, Collections.emptyList())));
}
此功能首先将您的样本分组,然后根据您感兴趣的垃圾箱,从地图中提取列表,或者如果没有列表则创建一个空列表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句