Java8:映射Lambda表达式
我有一个Java8:映射Lambda表达式,java,collections,lambda,java-8,Java,Collections,Lambda,Java 8,我有一个Map multiFieldMap,我需要在其值集上创建它,并将值添加到multifieldlist,如下所示 public List<Object> fetchMultiFieldsList() { List<Object> multiFieldsList = new ArrayList<Object>(); for (Entry<String, List<Object>> entry : multiField
Map multiFieldMap
,我需要在其值集上创建它,并将值添加到multifieldlist
,如下所示
public List<Object> fetchMultiFieldsList() {
List<Object> multiFieldsList = new ArrayList<Object>();
for (Entry<String, List<Object>> entry : multiFieldMap.entrySet()) {
String entityName = entry.getKey();
List<Object> ids = entry.getValue();
for (Object id : ids) {
Object entity = queryService.query(entityName, queryService.property("id").eq(id));
multiFieldsList.add(entity);
}
}
return multiFieldsList;
}
公共列表获取多字段列表(){
List multifieldlist=new ArrayList();
for(条目:multiFieldMap.entrySet()){
字符串entityName=entry.getKey();
List id=entry.getValue();
用于(对象id:ids){
Object entity=queryService.query(entityName,queryService.property(“id”).eq(id));
多字段列表。添加(实体);
}
}
返回多字段列表;
}
我想知道这个方法是否可以进一步简化?您确实可以使用流来简化内部循环 您可以替换:
List<Object> ids = entry.getValue();
for (Object id : ids) {
Object entity = queryService.query(entityName, queryService.property("id").eq(id));
multiFieldsList.add(entity);
}
但你并没有从中获得太多。你的选择
有关“全流”解决方案,请参见@Eran的答案。您可以使用流API:
List<Object> multiFieldsList =
multiFieldMap.entrySet()
.stream()
.flatMap(e -> e.getValue()
.stream()
.map(o -> queryService.query(e.getKey(), queryService.property("id").eq(o))))
.collect(Collectors.toList());
列表多字段列表=
multifiedMap.entrySet()
.stream()
.flatMap(e->e.getValue()
.stream()
.map(o->queryService.query(e.getKey(),queryService.property(“id”).eq(o)))
.collect(Collectors.toList());
您可以这样简化它:
public List<Object> fetchMultiFieldsList() {
List<Object> multiFieldsList = new ArrayList<>();
multiFieldMap.forEach( (entityName, ids ) ->
ids.forEach( id -> multiFieldsList.add(
queryService.query(entityName, queryService.property("id").eq(id)))
)
);
return multiFieldsList;
}
公共列表获取多字段列表(){
List multifieldlist=new ArrayList();
多字段映射forEach((entityName,ID)->
id.forEach(id->multifieldlist.add(
queryService.query(entityName,queryService.property(“id”).eq(id)))
)
);
返回多字段列表;
}
除非您想使用
流
API,否则该方法可能是代码简化方面的最大胜利,因为您不再需要处理Map.Entry
及其通用签名…这是一种典型的情况,我个人认为完整流解决方案的可读性实际上不如“好的旧解决方案”foreach循环:pCode简化并不总是需要Stream
API使用…
public List<Object> fetchMultiFieldsList() {
List<Object> multiFieldsList = new ArrayList<>();
multiFieldMap.forEach( (entityName, ids ) ->
ids.forEach( id -> multiFieldsList.add(
queryService.query(entityName, queryService.property("id").eq(id)))
)
);
return multiFieldsList;
}