我有一个
Catalog
具有以下属性的bean:
catalog_id
catalog_name
catalog_price
catalog_title
catalog_id
不是唯一的,可以有多个
目录
相同的对象
id
.
有一个清单
目录
对象,我想用相同的
身份证件
在第二个for循环中,我想通过发生的次数循环
身份证件
.
比如说:
catalogList2.stream()
.collect(Collectors.groupingBy(Catalog::getId, Collectors.counting()))
.entrySet()
.stream()
.map(p->"catalog id--->"+p.getKey()+" -"+p.getValue()).forEach(System.out::println);
从上面的代码中,我可以得到以下输出:
catalog id--->17553 -- 8
catalog id--->545 -- 8
catalog id--->546 -- 6
catalog id--->40962 -- 16
catalog id--->901 -- 12
但是,在那之后我想做如下工作:(这只是一个我想实现的结构)
for(Catalog cat1:p.getKey()){
for(int i=0;i<p.getValue();i++){
System.out.println("Name -->"+cat1.get(i)));
}
}
我不知道如何实现这个结构。
更新
在我的日食中得到信息
Lambda expression's parameter catalog cannot redeclare another local variable defined in an enclosing scope.
当我试图添加第二个系统输出时:
catalogList2.stream()
.collect(Collectors.groupingBy(Catalog::getId))
.forEach((id, catalogs) -> {
System.out.println("Catalog id : " + id + " : " + catalogs.size());
catalogs.forEach(catalog -> {
System.out.println("Name -->"+catalog.getCatalog_attr_name());
System.out.println("Value --->"+catalog.getCatalog_attr_value());
});
});
更新2
我在eclipse中收到这个消息
Local variable catalog defined in an enclosing scope must be final or effectively final
排队
String catalogName=catalog.getCatalog_name(); // getting error on this line
请在这里找到我的代码;
JSONObject jsonObj=null;
JSONArray respArray=new JSONArray();
catalogList2.stream()
.collect(Collectors.groupingBy(Catalog::getId))
.forEach((id, catalogs) -> {
System.out.println("Catalog id : " + id + " : " + catalogs.size());
String catalogName=catalog.getCatalog_name();
String longDescriptionStr = catalogName.concat("_long_description");
String descriptionStr = catalogName.concat("_description");
jsonObj.put("catalog_id", id);
catalogs.forEach(c -> {
String longDescription=null;
String description=null;
String catalogAttrName = c.getCatalog_attr_name();
if(StringUtils.equalsIgnoreCase(catalogAttrName, longDescriptionStr)) {
longDescription = c.getCatalog_attr_value();
}
if(StringUtils.equalsAnyIgnoreCase(catalogAttrName, descriptionStr)) {
description = c.getCatalog_attr_value();
}
jsonObj.put("description", description);
jsonObj.put("longDescription", longDescription);
});
respArray.put(jsonObj);
});
System.out.println("Printing JSON Array --->"+respArray.toString());