Java8新特性 Collectors的方法(四)


// Collectors的方法
public class Lambda2 {


    public static List<Integer> createListByInteger() {
        List<Integer> list = Lists.newArrayList(1, 2, 32, 3, 4, 5, 6, 7, 3, 7, 10, 11, 4);
        return list;
    }

    public static List<String> createListByString() {
        List<String> list = Lists.newArrayList("1", "2", "32", "3", "4", "5", "6", "7", "8", "9", "10", "11", "0");
        return list;
    }

    public static List<String> createListByCharacter() {
        List<String> list = Lists.newArrayList("a", "d", "a", "c", "f", "e", "t", "l");
        return list;
    }

    public static List<Product> createProduct() {
        List<Product> list = new ArrayList<Product>();
        String str = "[\n" +
                "    {\n" +
                "        \"goods_status\":\"正常\",\n" +
                "        \"goods_name\":\"鲜淮山炒黑木耳\",\n" +
                "        \"goods_cover\":\"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1405304736,1966318522&fm=26&gp=0.jpg\",\n" +
                "        \"classify_status\":\"正常\",\n" +
                "        \"goods_price\":28,\n" +
                "        \"classify_name\":\"每日抢购\",\n" +
                "        \"classify_id\":\"1323454502753538048\",\n" +
                "        \"goods_id\":\"1317807825745088512\",\n" +
                "        \"goods_discount\":0\n" +
                "    },\n" +
                "    {\n" +
                "        \"goods_status\":\"正常\",\n" +
                "        \"goods_name\":\"玉米松子\",\n" +
                "        \"goods_cover\":\"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1405304736,1966318522&fm=26&gp=0.jpg\",\n" +
                "        \"classify_status\":\"正常\",\n" +
                "        \"goods_price\":35,\n" +
                "        \"classify_name\":\"每日抢购\",\n" +
                "        \"classify_id\":\"1323454502753538048\",\n" +
                "        \"goods_id\":\"1317807947237298176\",\n" +
                "        \"goods_discount\":0\n" +
                "    },\n" +
                "    {\n" +
                "        \"goods_status\":\"正常\",\n" +
                "        \"goods_name\":\"腊八豆蒸排骨\",\n" +
                "        \"goods_cover\":\"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1405304736,1966318522&fm=26&gp=0.jpg\",\n" +
                "        \"classify_status\":\"正常\",\n" +
                "        \"goods_price\":18,\n" +
                "        \"classify_name\":\"每日抢购\",\n" +
                "        \"classify_id\":\"1323454502753538048\",\n" +
                "        \"goods_id\":\"1317807639778037760\",\n" +
                "        \"goods_discount\":0\n" +
                "    },\n" +
                "    {\n" +
                "        \"goods_status\":\"正常\",\n" +
                "        \"goods_name\":\"蒜蓉粉丝蒸娃娃菜\",\n" +
                "        \"goods_cover\":\"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1405304736,1966318522&fm=26&gp=0.jpg\",\n" +
                "        \"classify_status\":\"正常\",\n" +
                "        \"goods_price\":28,\n" +
                "        \"classify_name\":\"优先新品\",\n" +
                "        \"classify_id\":\"1323454357907443712\",\n" +
                "        \"goods_id\":\"1317807566960726016\",\n" +
                "        \"goods_discount\":0\n" +
                "    },\n" +
                "    {\n" +
                "        \"goods_status\":\"正常\",\n" +
                "        \"goods_name\":\"湘水肉沫蒸蛋\",\n" +
                "        \"goods_cover\":\"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1405304736,1966318522&fm=26&gp=0.jpg\",\n" +
                "        \"classify_status\":\"正常\",\n" +
                "        \"goods_price\":33,\n" +
                "        \"classify_name\":\"优先新品\",\n" +
                "        \"classify_id\":\"1323454357907443712\",\n" +
                "        \"goods_id\":\"1317807434039037952\",\n" +
                "        \"goods_discount\":0\n" +
                "    },\n" +
                "    {\n" +
                "        \"goods_status\":\"正常\",\n" +
                "        \"goods_name\":\"紫苏土豆牛肉碎\",\n" +
                "        \"goods_cover\":\"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1405304736,1966318522&fm=26&gp=0.jpg\",\n" +
                "        \"classify_status\":\"正常\",\n" +
                "        \"goods_price\":70,\n" +
                "        \"classify_name\":\"优先新品\",\n" +
                "        \"classify_id\":\"1323454357907443712\",\n" +
                "        \"goods_id\":\"1317807129075388416\",\n" +
                "        \"goods_discount\":0\n" +
                "    },\n" +
                "    {\n" +
                "        \"goods_status\":\"正常\",\n" +
                "        \"goods_name\":\"青豆炒肉泥\",\n" +
                "        \"goods_cover\":\"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1405304736,1966318522&fm=26&gp=0.jpg\",\n" +
                "        \"classify_status\":\"正常\",\n" +
                "        \"goods_price\":58,\n" +
                "        \"classify_name\":\"优先新品\",\n" +
                "        \"classify_id\":\"1323454357907443712\",\n" +
                "        \"goods_id\":\"1317806865106866176\",\n" +
                "        \"goods_discount\":0\n" +
                "    },\n" +
                "    {\n" +
                "        \"goods_status\":\"正常\",\n" +
                "        \"goods_name\":\"吮指青尾鱼\",\n" +
                "        \"goods_cover\":\"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1405304736,1966318522&fm=26&gp=0.jpg\",\n" +
                "        \"classify_status\":\"正常\",\n" +
                "        \"goods_price\":128,\n" +
                "        \"classify_name\":\"热销商品\",\n" +
                "        \"classify_id\":\"1323454099097915392\",\n" +
                "        \"goods_id\":\"1317805910818820096\",\n" +
                "        \"goods_discount\":0\n" +
                "    },\n" +
                "    {\n" +
                "        \"goods_status\":\"正常\",\n" +
                "        \"goods_name\":\"香爆酱牛肉\",\n" +
                "        \"goods_cover\":\"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1405304736,1966318522&fm=26&gp=0.jpg\",\n" +
                "        \"classify_status\":\"正常\",\n" +
                "        \"goods_price\":88,\n" +
                "        \"classify_name\":\"热销商品\",\n" +
                "        \"classify_id\":\"1323454099097915392\",\n" +
                "        \"goods_id\":\"1317805307065536512\",\n" +
                "        \"goods_discount\":0\n" +
                "    },\n" +
                "    {\n" +
                "        \"goods_status\":\"正常\",\n" +
                "        \"goods_name\":\"清远鸡\",\n" +
                "        \"goods_cover\":\"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1405304736,1966318522&fm=26&gp=0.jpg\",\n" +
                "        \"classify_status\":\"正常\",\n" +
                "        \"goods_price\":98,\n" +
                "        \"classify_name\":\"热销商品\",\n" +
                "        \"classify_id\":\"1323454099097915392\",\n" +
                "        \"goods_id\":\"1317804058198937600\",\n" +
                "        \"goods_discount\":0\n" +
                "    }\n" +
                "]";

        JSONArray productArray = JSONArray.parseArray(str);
        for (int i = 0; i < productArray.size(); i++) {
            Product product = new Product();
            JSONObject productJson = productArray.getJSONObject(i);
            product = JSON.parseObject(productJson.toJSONString(), Product.class);

            list.add(product);
        }
        return list;
    }

    public static void collectors() {
        // toCollection 方法返回一个收集器 输入元素到一个新的集合中
        List<Integer> list = createListByInteger();
        Collection<Integer> collection = list.parallelStream().collect(Collectors.toCollection(ArrayList::new));
        System.out.println(collection);

        System.out.println("###########################################");

        Collection<Integer> collection1 = list.parallelStream().collect(Collectors.toCollection(HashSet::new));
        System.out.println(collection1);

        System.out.println("*******************************************");

        // toList()  返回一个收集器把数据收集到一个新的list 中
        List<String> list1 = createListByCharacter();
        List<String> list2 = list1.parallelStream().map(String::toUpperCase).collect(Collectors.toList());
        System.out.println(list2);

        System.out.println("###########################################");

        // toSet()
        Set<String> list3 = list1.parallelStream().map(String::toUpperCase).collect(Collectors.toSet());
        System.out.println(list3);

        System.out.println("*******************************************");

        // toMap()  Function.identity() 类似于 item -> item
        Map<String, String> map = list1.parallelStream().collect(Collectors.toMap(Function.identity(), String::toUpperCase, (k1, k2) -> k1));
        Map<String, String> map1 = list1.parallelStream().collect(Collectors.toMap(item -> item.toUpperCase(), String::toUpperCase, (k1, k2) -> k1));
        System.out.println(map);

        System.out.println("###########################################");

        System.out.println(map1);

        System.out.println("*******************************************");

        // joining  连接字符串
        String concat = Stream.of("a", "b").collect(Collectors.joining());
        System.out.println(concat);

        System.out.println("###########################################");

        String concat1 = Stream.of("a", "b").collect(Collectors.joining(","));
        System.out.println(concat1);

        System.out.println("###########################################");

        String concat2 = Stream.of("a", "b").collect(Collectors.joining(",", "[", "]"));
        System.out.println(concat2);

        System.out.println("###########################################");

        String concat3 = Stream.of("a", new StringBuilder("b"), new StringBuilder("c")).collect(Collectors.joining(","));
        System.out.println(concat3);

        System.out.println("*******************************************");

        // mapping/flatMapping  它将Function应用于输入元素,然后将它们累积到给定的Collector
        List<String> list4 = list1.parallelStream().collect(Collectors.mapping(String::toUpperCase, Collectors.toList()));
        System.out.println(list4.toString());

        System.out.println("###########################################");

        Set<String> set = list1.parallelStream().collect(Collectors.mapping(Function.identity(), Collectors.toSet()));
        System.out.println(set);

        System.out.println("*******************************************");

        // filter 设置过滤条件
        List<String> list5 = list1.parallelStream().filter(item -> item.toUpperCase().contains("A")).collect((Collectors.toList()));
        System.out.println(list5);

        System.out.println("*******************************************");

        // collectingAndThen

        // count 计数
        long count = list1.parallelStream().filter(item -> item.toUpperCase().contains("A")).count();
        System.out.println(count);

        System.out.println("*******************************************");

        // minBy 根据给定的比较器返回最小的元素(Interger)
        Optional<Integer> min = list.stream().collect(Collectors.minBy((x, y) -> x - y));
        System.out.println(min);

        System.out.println("*******************************************");

        // maxBy 它根据给定的比较器返回最大元素
        Optional<Integer> max = list.stream().collect(Collectors.maxBy((x, y) -> x - y));
        System.out.println(max);

        System.out.println("*******************************************");

        // 求数据的总和
        Integer sum1 = list.stream().collect(Collectors.summingInt(Integer::intValue));
        Integer sum2 = list.stream().collect(Collectors.summingInt(item -> item));
        System.out.println(sum1);
        System.out.println(sum2);

        System.out.println("*******************************************");

        // 求数据的平均数
        Double avg = list.stream().collect(Collectors.averagingDouble(Integer::intValue));
        System.out.println(avg);

        System.out.println("*******************************************");

        // 分组 groupingBy
        List<Product> productList = createProduct();
        Map<String, List<Product>> productMap = productList.parallelStream().collect(Collectors.groupingBy(Product::getClassify_name));
        System.out.println(productMap);

        System.out.println("###########################################");

        // groupingByConcurrent 分组,是并发和无序的
        Map<String, List<Product>> productMap1 = productList.parallelStream().collect(Collectors.groupingByConcurrent(Product::getClassify_name));
        System.out.println(productMap);

        System.out.println("*******************************************");

        // partitioningBy    返回一个Collector,它根据Predicate对输入元素进行分区,并将它们组织成Map <Boolean,List>
        Map<Boolean, List<Integer>> map2 = list.stream().collect(Collectors.partitioningBy(item -> item % 2 == 0));
        System.out.println(map2);

        System.out.println("*******************************************");

        // BinaryOperator 返回一个收集器,它在指定的BinaryOperator下执行其输入元素的减少。 类似于having操作
        // 这主要用于多级缩减,例如使用groupingBy()和partitioningBy()方法指定下游收集器
        // Collectors.reducing 定制归一化收集器(reducing)得到自定义结果集
        Map<Boolean, Optional<Integer>> map3 = list.stream().collect(Collectors.partitioningBy(item -> item % 2 == 0, Collectors.reducing(BinaryOperator.maxBy(Comparator.comparing(Integer::intValue)))));
        System.out.println(map3);

        System.out.println("*******************************************");

        // summarizingInt 返回统计数据:min, max, average, count, sum
        IntSummaryStatistics intSummaryStatistics = list.stream().collect(Collectors.summarizingInt(Integer::intValue));
        System.out.println(intSummaryStatistics);
    }

    public static void main(String[] args) {
        collectors();
    }
}

欢迎关注我的微信公众号,更多内容将在微信公众号中发布:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值