bigdata

5. topN 求前10个最大的数

2018-12-20  本文已影响0人  百炼

date[2018-12-20]

准备材料

  1. 生成Long类型的包装数据流
Stream.generate(Math::random)
              .mapToLong(v -> {
                    Double d = v * 1000000;
                    return d.longValue();
                })
  1. 生成Int类型的非包装数据流
Random random = new Random(System.currentTimeMillis());
IntStream.generate(() -> random.nextInt(100000))

求前10个最大的数

生成100不包含重复的个Long类型的数据,排序然后求取前10个

   @Test
    public void test() {
        Stream.generate(Math::random)
                .mapToLong(v -> {
                    Double d = v * 1000000;
                    return d.longValue();
                })
                .distinct()
                .limit(100)
                .sorted()
                .limit(10)
                .forEach(System.out::println);
    }

SortedMap通过移除lastKey,firstKey实现不同的需求

使用SortedMap求最大的10个数

   /**
     * 求最大的10个数
     */
    @Test
    public void testTopN() {
        TreeMap<Long, String> top10Map = new TreeMap<>();
        long[] longArrs = Stream.generate(Math::random)
                .mapToLong(v -> {
                    Double d = v * 1000000;
                    return d.longValue();
                })
                .limit(1000)
                .toArray();


        Arrays.stream(longArrs).forEach(v -> {
            top10Map.put(v, "v:" + v);
            if (top10Map.size() > 10) {
                top10Map.remove(top10Map.firstKey());
            }
        });

        top10Map.forEach((k, v) -> {
            System.out.println(k + ":" + v);
        });
        System.out.println("===================================");
        Arrays.sort(longArrs);
        for (int i = 990; i < 1000; i++) {
            System.out.println(longArrs[i] + " ");
        }
    }

使用SortedMap求最小的10个数

    /**
     * 求最小的10个数
     */
    @Test
    public void testLowN() {
        TreeMap<Long, String> low10Map = new TreeMap<>();
        long[] longArrs = Stream.generate(Math::random)
                .mapToLong(v -> {
                    Double d = v * 1000000;
                    return d.longValue();
                })
                .limit(1000)
                .toArray();


        Arrays.stream(longArrs).forEach(v -> {
            low10Map.put(v, "v:" + v);
            if (low10Map.size() > 10) {
                low10Map.remove(low10Map.lastKey());
            }
        });

        low10Map.forEach((k, v) -> {
            System.out.println(k + ":" + v);
        });
        System.out.println("===================================");
        Arrays.sort(longArrs);
        for (int i = 0; i < 10; i++) {
            System.out.println(longArrs[i] + " ");
        }
    }
上一篇下一篇

猜你喜欢

热点阅读