Java 8按键将列表映射到列表的映射
我有以下Java代码:Java 8按键将列表映射到列表的映射,java,java-8,java-stream,Java,Java 8,Java Stream,我有以下Java代码: List<BaseQuery> queries; Map<Long, List<BaseQuery>> map = new HashMap<>(); for (BaseQuery query : queries) { List<BaseQuery> queryList = map.get(query.getCharacteristicId()); if(queryList == null) {
List<BaseQuery> queries;
Map<Long, List<BaseQuery>> map = new HashMap<>();
for (BaseQuery query : queries) {
List<BaseQuery> queryList = map.get(query.getCharacteristicId());
if(queryList == null) {
queryList = new ArrayList<>();
map.put(query.getCharacteristicId(), queryList);
}
queryList.add(query);
}
列表查询;
Map Map=newhashmap();
for(BaseQuery查询:查询){
List queryList=map.get(query.getCharacteristicId());
if(queryList==null){
queryList=newarraylist();
put(query.getCharacteristicId(),queryList);
}
添加(查询);
}
您能演示如何将其转换为Java 8和streams吗?它非常简单,只需
groupingBy
:
queries.stream()
.collect(Collectors.groupingBy(BaseQuery::getCharacteristicId));
这将创建一个列表
作为值,它隐式地是:
queries.stream()
.collect(Collectors.groupingBy(
BaseQuery::getCharacteristicId,
Collectors.toList()));
但是如果您想要一个可变的列表的保证:
queries.stream()
.collect(Collectors.groupingBy(
BaseQuery::getCharacteristicId,
Collectors.toCollection(ArrayList::new)));
在Java8中,您可以按照@Eugene的答案进行操作。在java 7中,您可以使用org.apache.commons.collections.CollectionUtils如下所示:
List<String> idList = (List<String>) CollectionUtils.collect(objectList,
new BeanToPropertyValueTransformer("id"));
List idList=(List)CollectionUtils.collect(objectList,
新BeanPropertyValueTransformer(“id”);
Hey:)您尝试过什么吗?Map=querys.stream().collect(collector.groupby(BaseQuery::getCharacteristicd))代码>你可以删除你自己的问题顺便说一句…你到底为什么要这样编辑它?让它保持打开状态有什么问题?那么将其恢复为原始形式有什么问题?这个问题是否会从你们的个人资料中删除的决定和它现在的样子并没有多大关系。你介意把它转回到包含真实问题的版本吗?