根据所提供的方法,完成题目:批量根据供应商ID(partnerID)获取供应商下所关联的酒店名称(poiName)以及酒店的联系人姓名(contactName)

//    根据所提供的方法,完成题目:批量根据供应商ID(partnerID)获取供应商下所关联的酒店名称(poiName)以及酒店的联系人姓名(contactName);
//    方法1)AService.getHotelByParnterId(List partnerId),根据供应商ID,返回关联的poiId集合;
//    方法2)BService.batchGetHotelByPoiId(List poiIds),批量根据酒店id集合,返回酒店信息集合,酒店信息包含酒店ID,酒店名称;
//    方法3)CService.batchGetContactBypoiIds(List poiIds),批量根据酒店id集合,返回酒店下联系人信息集合,酒店联系人信息包含酒店ID(poiID),联系人名称(contactName);
//    小贴士:同一个酒店联系人若有多个,任意取一个;默认一次查询可返回数据,无需考虑分批查询;方法中可能因为某些数据问题,导致数据缺失,结合日常工作场景,完整考虑代码健壮性; 这个怎么实现

 AService

package com.dmg.kucun.service;

import com.dmg.kucun.utils.DataUtils;

import java.util.*;

public class AService {


    /**
     * 根据供应商ID,返回关联的poiId(酒店id)集合
     * @param partnerId
     * @return
     */
    public List getHotelByParnterId(List partnerId){
        Listlist=new ArrayList<>();
        //获取map数据
        Map>map= DataUtils.getGongYingShangMap();
        for (Long l : partnerId) {
            if(map.containsKey(l)){
                //如果存在对应的供应商 把对应的酒店集合放入
                list.addAll(map.get(l));
            }
        }
        //返回酒店集合
        return list;
    }



}

BService

package com.dmg.kucun.service;

import com.dmg.kucun.utils.DataUtils;

import java.util.List;

public class BService {

    /**
     * 批量根据酒店id集合,返回酒店信息集合,酒店信息包含酒店ID,酒店名称;
     * @param poiIds
     * @return
     */
    public List batchGetHotelByPoiId(List poiIds) {
        return DataUtils.getJiuDianByPoiId(poiIds);
    }
}

CService

package com.dmg.kucun.service;

import com.dmg.kucun.utils.DataUtils;

import java.util.List;

public class CService {

    /**
     * 批量根据酒店id集合,返回酒店下联系人信息集合,酒店联系人信息包含酒店ID(poiID),联系人名称(contactName)
     * @param poiIds
     * @return
     */
    public List batchGetContactBypoiIds(List poiIds) {
        return DataUtils.getLianXiRenByPoiId(poiIds);
    }
}

JiuDian 

package com.dmg.kucun.service;

/**
 * 酒店信息
 */
public class JiuDian {

    //酒店ID
    private Long poiId;

    //酒店名称
    private String poiName;

    //酒店的联系人姓名
    private String contactName;

    public Long getPoiId() {
        return poiId;
    }

    public void setPoiId(Long poiId) {
        this.poiId = poiId;
    }

    public String getPoiName() {
        return poiName;
    }

    public void setPoiName(String poiName) {
        this.poiName = poiName;
    }

    public String getContactName() {
        return contactName;
    }

    public void setContactName(String contactName) {
        this.contactName = contactName;
    }

    @Override
    public String toString() {
        return "JiuDian{" +
                "poiId=" + poiId +
                ", poiName='" + poiName + '\'' +
                ", contactName='" + contactName + '\'' +
                '}';
    }
}

LianXiRen

package com.dmg.kucun.service;

import java.util.List;

/**
 * 酒店联系人
 */
public class LianXiRen {

    //酒店ID
    private Long poiId;

    //酒店的联系人姓名
    private List contactName;

    public Long getPoiId() {
        return poiId;
    }

    public void setPoiId(Long poiId) {
        this.poiId = poiId;
    }

    public List getContactName() {
        return contactName;
    }

    public void setContactName(List contactName) {
        this.contactName = contactName;
    }

    @Override
    public String toString() {
        return "LianXiRen{" +
                "poiId=" + poiId +
                ", contactName=" + contactName +
                '}';
    }
}

DataUtils

package com.dmg.kucun.utils;

import com.dmg.kucun.service.JiuDian;
import com.dmg.kucun.service.LianXiRen;

import java.util.*;
import java.util.stream.Collectors;

/**
 * 生成数据工具类
 */
public class DataUtils {

    /**
     * 生成酒店信息
     * @return
     */
    public static List getJiuDianList(){
        Listlist=new ArrayList<>();
        for (long i = 10; i <=18 ; i++) {
            JiuDian a=new JiuDian();
            a.setPoiId(i);
            a.setPoiName(i+"酒店");
            list.add(a);
        }
        return list;
    }

    /**
     * 生成酒店联系人信息
     * @return
     */
    public static List getLianXiRenList(){
        Listlist=new ArrayList<>();
        for (long i = 10; i <=18 ; i++) {
            LianXiRen a=new LianXiRen();
            a.setPoiId(i);
            a.setContactName(Arrays.asList("张三"+i,"李四"+i));
            list.add(a);
        }
        return list;
    }


    /**
     * 酒店集合转map
     * @return
     */
    public static Map getJiuDianMap(){
        //获取酒店信息
        List list=getJiuDianList();
        //把集合转成map
        Map map = list.stream().collect(Collectors.toMap(JiuDian::getPoiId,(x)->x));
        return map;
    }

    /**
     * 联系人集合转map
     * @return
     */
    public static Map getLianXiRenMap(){
        //获取酒店信息
        List list=getLianXiRenList();
        //把集合转成map
        Map map = list.stream().collect(Collectors.toMap(LianXiRen::getPoiId,(x)->x));
        return map;
    }

    /**
     * 根据酒店id集合 获取酒店集合信息
     * @param poiIds
     * @return
     */
    public static ListgetJiuDianByPoiId(List poiIds){
        //返回集合
        List res=new ArrayList<>();
        //把集合转成map
        Map map = DataUtils.getJiuDianMap();
        for (Long x : poiIds) {
            if(map.containsKey(x)){
                //如果存在 就从map中取出酒店信息
                JiuDian jiuDian=map.get(x);
                res.add(jiuDian);
            }
        }
        return res;
    }

    /**
     * 一个供应商会有多个酒店 这里模拟生成一些数据
     * @return
     */
    public static Map> getGongYingShangMap(){
        //key 供应商id
        //value 酒店id 集合
        Map>map=new HashMap<>();
        map.put(1L, Arrays.asList(10L,11L,12L));
        map.put(2L, Arrays.asList(13L,14L,15L));
        map.put(3L, Arrays.asList(16L,17L,18L));
        return map;
    }


    /**
     * 根据酒店id集合 获取联系人集合信息
     * @param poiIds
     * @return
     */
    public static ListgetLianXiRenByPoiId(List poiIds){
        //返回集合
        List res=new ArrayList<>();
        //把集合转成map
        Map map = DataUtils.getLianXiRenMap();
        for (Long x : poiIds) {
            if(map.containsKey(x)){
                //如果存在 就从map中取出酒店信息
                LianXiRen jiuDian=map.get(x);
                res.add(jiuDian);
            }
        }
        return res;
    }
}

Test

package com.dmg.kucun.utils;

import com.dmg.kucun.service.*;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Test {
//    根据所提供的方法,完成题目:批量根据供应商ID(partnerID)获取供应商下所关联的酒店名称(poiName)以及酒店的联系人姓名(contactName);
//    方法1)AService.getHotelByParnterId(List partnerId),根据供应商ID,返回关联的poiId集合;
//    方法2)BService.batchGetHotelByPoiId(List poiIds),批量根据酒店id集合,返回酒店信息集合,酒店信息包含酒店ID,酒店名称;
//    方法3)CService.batchGetContactBypoiIds(List poiIds),批量根据酒店id集合,返回酒店下联系人信息集合,酒店联系人信息包含酒店ID(poiID),联系人名称(contactName);
//    小贴士:同一个酒店联系人若有多个,任意取一个;默认一次查询可返回数据,无需考虑分批查询;方法中可能因为某些数据问题,导致数据缺失,结合日常工作场景,完整考虑代码健壮性; 这个怎么实现

    public static void main(String[] args) {
        AService aService=new AService();
        //根据供应商ID,返回关联的poiId集合
        List poiIds = aService.getHotelByParnterId(Arrays.asList(1L, 2L));

        BService bService=new BService();
        //批量根据酒店id集合,返回酒店信息集合,酒店信息包含酒店ID,酒店名称
        List bList = bService.batchGetHotelByPoiId(poiIds);

        CService cService=new CService();
        //批量根据酒店id集合,返回酒店下联系人信息集合,酒店联系人信息包含酒店ID(poiID),联系人名称(contactName)
        ListcList=cService.batchGetContactBypoiIds(poiIds);

        //把酒店和酒店信息合并成map
        Map map=getMap(bList,cList);
        for (Map.Entry entry : map.entrySet()) {
            JiuDian j=entry.getValue();
            System.out.println("酒店名称:"+j.getPoiName()+",联系人姓名:"+j.getContactName());
        }
    }

    /**
     * 把酒店和酒店信息合并成map
     * @param bList
     * @param cList
     * @return
     */
    public static  Map getMap(List bList,ListcList){
        //先把酒店集合转成map
        Map jdMap = bList.stream().collect(Collectors.toMap(JiuDian::getPoiId, x -> x));
        //遍历酒店联系人集合
        for (LianXiRen x : cList) {
            if(jdMap.containsKey(x.getPoiId())){
                //如果存在相同的酒店id  那么把酒店联系人 放入酒店map中 联系人取第一个
                jdMap.get(x.getPoiId()).setContactName(x.getContactName().get(0));
            }
        }
        return jdMap;
    }

}

根据所提供的方法,完成题目:批量根据供应商ID(partnerID)获取供应商下所关联的酒店名称(poiName)以及酒店的联系人姓名(contactName)_第1张图片

你可能感兴趣的:(java,java)