java - 使用 RxJava 拆分整数 ArrayList

标签 java arrays algorithm split rx-java

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

[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/

相关文章:

algorithm - 剪裁 pipe 时如何计算最小浪费

java - 如何用Java提取视频中的所有帧?

生成 'nearly sorted' 或 'k sorted' 列表的算法?

java - 什么是 Maven 快照,我们为什么需要它?

c - 以 Row Major 或 Column Major 方式将多维数组存储在内存中有什么区别?

c# - 在 C# 中有效缩小二维数组

ios - 如何在 switch 语句中使用谓词

找到所选顶点的最小生成树的算法

Java+Reflection : Invoke method on variable access. 可以吗?

java - 有没有办法在所有设备上显示操作按钮,包括带有菜单按钮的设备?