JTK*_*JTK 3 java lambda hashmap java-8
我有一个List<POJO>我想从中提取数据,我感兴趣的变量是:
Environment: StringApplication: StringThroughput: Double有7个Environment对象,每个对象Environment有18个Application对象,每个对象都有多个values.
我正在尝试迭代List<POJO>并将这些值存储在一个Hashmap<Environment.ToString, Hashmap<Applications.ToString, List<Double>>
我正在尝试使用Java 8的Lambda功能; 我的代码到目前为止:
private HashMap<String, List<BigDecimal>> appMap = new HashMap<String, List<BigDecimal>>();
private HashMap<String, HashMap> envMap = new HashMap<String, HashMap>();
for(POJO chartModel: List<POJO>) {
appMap.computeIfAbsent(chartModel.getName(), v -> new ArrayList<BigDecimal>())
.add(BigDecimal.valueOf(chartModel.getThroughput()));
envMap.put(chartModel.getEnvironment(), appMap);
}
Run Code Online (Sandbox Code Playgroud)
首先,是否有一种速记方式来迭代List内部Map使用Java8?
其次,我的代码不太正确,所以目前地图将所有Throughput值添加到其Application键中,因此我最终得到了18个带有值列表的键.
我需要它做的是envMap我应该有7个Environment对象,每个Application对象有18个对象和值,所以Application总共会有126个对象.这可以通过我尝试的方式实现,是否有Lambda方法来实现这一目标?
您需要按操作使用2个分组:第一个按照环境分组,第二个根据名称分组.最后,您需要将每个值映射到BigDecimal其吞吐量的值.
假设pojo是List<POJO>:
Map<String, Map<String, List<BigDecimal>>> result =
pojo.stream()
.collect(Collectors.groupingBy(
POJO::getEnvironment,
Collectors.groupingBy(
POJO::getName,
Collectors.mapping(p -> BigDecimal.valueOf(p.getThroughput()), Collectors.toList())
)
));
Run Code Online (Sandbox Code Playgroud)