// 根据所提供的方法,完成题目:批量根据供应商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;
}
}