gpt4 book ai didi

java - 使用 RxJava 拆分整数 ArrayList

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:43:08 26 4
gpt4 key购买 nike

我正在尝试根据另一个列表中的值将整数列表拆分为更小的数组(范围)。因此,例如,拥有一个包含这些值的数组

[100, 10, 4000, 9, 3000, 1024, 15, 660, 999]

以及要拆分的值数组。

[20, 300, 500, 1000, 10000]

我想得到值小于对应值的数组。喜欢

20 -- [9, 10, 15] // (value from first array < 20)
300 -- [100] // (20 <= value < 300)
500 -- [] // (300 <= value < 500)
1000 -- [660, 999] // (500 <= value < 1000)
10000 -- [1024, 3000, 4000] // (1000 <= value < 10000)

有什么方法可以使用 RxJava 实现吗?或者有什么快速算法可以做到这一点?

最佳答案

使用 java8 流,

    List<Integer> numbers = Arrays.asList(100, 10, 4000, 9, 3000, 1024, 15, 660, 999);
List<Integer> range = Arrays.asList(20, 300, 500, 1000, 10000); // sorted
Function<Integer, Integer> between = n -> {
for (Integer in : range) {
if (in >= n)
return in;
}
return -1;
};
Map<Integer, List<Integer>> grouped = numbers.stream().collect(Collectors.groupingBy(between));
System.out.println(grouped);

输出

{10000=[4000, 3000, 1024], 20=[10, 9, 15], 1000=[660, 999], 300=[100]}

您可以在 groupingBy 中以 TreeMap 的形式提供供应商,以对结果进行排序。

更新

按键排序

Map<Integer, List<Integer>> grouped = numbers.stream().collect(Collectors.groupingBy(between, TreeMap::new, Collectors.mapping(k -> k, Collectors.toList())));

输出

{20=[10, 9, 15], 300=[100], 1000=[660, 999], 10000=[4000, 3000, 1024]}

关于java - 使用 RxJava 拆分整数 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40026661/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com