重庆网站制作开发南通做网站推广的公司
我有一个List< POJO>我想从中提取数据,我感兴趣的变量是:
>环境:字符串
>应用:字符串
>吞吐量:双倍
有7个Environment对象,每个Environment有18个Application对象,每个对象都有多个值.
我正在尝试迭代List< POJO>并将这些值存储在Hashmap< Environment.ToString,Hashmap< Applications.ToString,List< Double>>
我正在尝试使用Java 8的Lambda功能;我的代码到目前为止:
private HashMap> appMap = new HashMap>();
private HashMap envMap = new HashMap();
for(POJO chartModel: List) {
appMap.computeIfAbsent(chartModel.getName(), v -> new ArrayList())
.add(BigDecimal.valueOf(chartModel.getThroughput()));
envMap.put(chartModel.getEnvironment(), appMap);
}
首先,是否有一种使用Java8在内部Map内迭代List的简便方法?
其次,我的代码不太正确,所以当前地图将所有吞吐量值添加到其Application键,因此我最终得到了18个带有值列表的键.
我需要它做的是在我的envMap中我应该有7个Environment对象,每个对象都有18个Application对象和值,所以总共有126个Application对象.这可以通过我尝试的方式实现,是否有Lambda方法来实现这一目标?
解决方法:
您需要按操作使用2个分组:第一个按照环境分组,第二个根据名称分组.最后,您需要将每个值映射到其吞吐量的BigDecimal值.
假设pojo是List< POJO>:
Map>> result =
pojo.stream()
.collect(Collectors.groupingBy(
POJO::getEnvironment,
Collectors.groupingBy(
POJO::getName,
Collectors.mapping(p -> BigDecimal.valueOf(p.getThroughput()), Collectors.toList())
)
));
标签:java,java-8,lambda,hashmap
来源: https://codeday.me/bug/20190722/1503203.html