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