使用RxJava拆分整型数组列表



我正试图通过另一个列表的值将整数列表拆分为较小的数组(范围)。因此,例如,拥有一个值为

的数组
[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]}

这似乎可以工作:

public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();
        list.add(100);
        list.add(10);
        list.add(4000);
        list.add(9);
        list.add(3000);
        list.add(1024);
        list.add(15);
        list.add(660);
        list.add(999);
        int[] splitValues = new int[]{20,300,500,1000,10000};
        int prev = 0;
        //100, 10, 4000, 9, 3000, 1024, 15, 660, 999
        Collections.sort(list);
        Map<Integer, Integer[]> map = new HashMap<Integer,Integer[]>();
        for (int i = 0; i < splitValues.length; i++) {
            for (int j=prev;j<list.size();j++) {
                if(splitValues[i]<list.get(j)){
                    addRecord(map,list,j, splitValues[i],prev);
                    prev = j;
                    break;
                }
            }
        }
        System.out.println(map);
    }
    private static void addRecord(Map<Integer, Integer[]> map, List<Integer> list, int j, int index, int start) {
        try {
            list = list.subList(start, j);          
        } catch (Exception e) {
            System.out.println("boo");
        }
        Integer[] arr = new Integer[j-start];
        list.toArray(arr);
        map.put(index, arr);
    }

唯一的问题是如何显示

相关内容

  • 没有找到相关文章

最新更新