Stream groupingBy分组案例

JDK 专栏收录该内容
11 篇文章 0 订阅
package com.gblfy.gxts;

import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 案例4:
 * 设计一个对外提供服务的接口,支持调用方传入多个账户编号查询订单。
 */
public class CaseFour {

    /**
     * 订单模型
     */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    class Order {

        /**
         * 订单编号
         */
        private Integer orderId;

        /**
         * 账户编号
         */
        private String accuntId;
    }

    /**
     * 模拟数据库查询,创建初始化订单数据
     */
    public List<Order> selectFromDB(List<String> accountIds) {
        List<Order> orderList = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            orderList.add(
                    new Order(i,
                            accountIds.get(i % accountIds.size())));
        }
        return orderList;
    }


    /**
     * @param accountIds
     * @return
     */
    public Map<String, List<Order>> queryOrderByAccountIds(List<String> accountIds) {
        return Optional.ofNullable(selectFromDB(accountIds))
                .map(List::stream)
                .orElseGet(Stream::empty)
                //TODO 分组
                .collect(Collectors.groupingBy(order -> order.getAccuntId()));


    }

    /**
     * 按照【账户】显示订单列表
     */
    @Test
    public void findNoScoreStudentList() {

        Map<String, List<Order>> orders = queryOrderByAccountIds(Lists.newArrayList("张三", "李四", "王五"));
        System.out.println(JSON.toJSONString(orders, true));

    }
}

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值