从流中的两个列表创建分离值的映射

py

我正在尝试创建两个列表的地图。第一个列表用于键,第二个列表用于分隔和分配值,其中没有匹配箱分配的值的情况将为空列表。应该像对键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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章