当前位置: 首页 > 知识库问答 >
问题:

通过具有相同属性(catalog\u id)的项目发生循环

颜德馨
2023-03-14

我有一个目录bean,具有以下属性:

catalog_id
catalog_name
catalog_price
catalog_title

目录id不是唯一的,可以有多个目录id相同的对象。

有一个Catalog对象的列表,我想收集所有具有相同id的对象,并且在一秒钟内循环我想通过该id的出现次数循环

比如说:

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)));
        //Something i will do here.

    }

}

我不知道如何实现这个结构。

使现代化

我在eclipse的Lambda表达式的参数目录中收到消息,无法重新声明在封闭范围中定义的另一个局部变量

当我尝试添加第二个sysout时:

 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局部变量目录中收到此消息必须是final或有效final

在“catalogName=catalog”行中。getCatalog\u name();//此行出错

请在这里找到我的代码;

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();  // getting error on this line
    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());

共有2个答案

拓拔浩阔
2023-03-14

您可以按以下方式执行:

catalogList
.stream()
.collect(Collectors.groupingBy(Catalog::getId))
.forEach((key,value)->{
    for(Catalog curValue:value)
        System.out.println("Name -->"+curValue.catalog_name);
    });

输出:

Name -->Catalog 2
Name -->Catalog 3
Name -->Catalog 4
Name -->Catalog 1
Name -->Catalog 7
Name -->Catalog 8
Name -->Catalog 9
Name -->Catalog 15
Name -->Catalog 16
Name -->Catalog 18
Name -->Catalog 19
Name -->Catalog 20
单昊穹
2023-03-14

使用没有下游收集器的groupingBy将ID映射到具有这些ID的目录列表。然后,您可以询问列表的大小以获取计数并遍历列表以获取每个曲库:

catalogList2.stream()
    .collect(Collectors.groupingBy(Catalog::getId))
    .forEach((id, catalogs) -> {
        System.out.println("Catalog id : " + id + " : " + catalogs.size());
        catalogs.forEach(System.out::println);
    });
 类似资料:
  • 问题内容: 如果您有一个包含带有重复属性的文本输入的表单,并且该表单已经过帐,那么您仍然能够从PHP数组中获取所有字段的值吗? 问题答案: 否。仅最后一个输入元素可用。 如果要使用相同名称的多个输入,请使用输入名称属性。然后将包含foo的数组,其中包含来自输​​入元素的所有值。 如果不使用则仅包含最后一个值的原因是因为PHP基本上只会爆炸并遍历要填充的原始查询字符串。当遇到已经存在的名称/值对时,

  • 问题内容: 我有一个对象数组,希望根据特定的对象对进行修剪。我想创建一个数组,此特定对仅包含一个对象。将重复项的哪个对象复制到新数组并不重要。 例如,我要基于的属性进行修整,创建一个仅包含每个值之一的新数组: 会成为: 是否存在会循环执行此操作的JavaScript或Angular函数? 编辑:要筛选的属性嵌套在另一个属性中。 问题答案: 您可以为此使用下划线:

  • 我正在尝试使用flex Box创建滑块。我的想法是创建一个父容器,并使滑块水平溢出。然后将父元素设置为无溢出,这样溢出的子元素就被隐藏了,我们可以使用滚动条查看其他子元素。 下图显示了我现在得到的输出。我试图使三个div具有父容器的全宽。这样,当红色div占据父div的空间时,只有红色div可见。要查看其余div,必须向右滚动。 我尝试过将宽度设置为100%,但似乎不起作用。

  • 问题内容: 我正在尝试使用RSA 7.5和Websphere 7服务器开发IBM JAX_WS Web服务。因为我是一个初学者,所以我遵循Java类优先方法,即首先创建Java类,然后生成WSDL文件。 当我尝试创建wsdl文件时,出现异常: java.security.PrivilegedActionException:com.sun.xml.internal.bind.v2.runtime.I

  • 问题内容: 我正在用C#编写.NET Framework 3.5。 我正在尝试将某些Json解析为JObject。 Json如下: 当我尝试将此Json解析为JObject时,JObject仅了解LargeBox。SmallBox和MedBox的信息丢失。显然,这是因为它将“ TBox”解释为一个属性,并且该属性已被覆盖。 我从Delphi编码的服务中收到此Json。我正在尝试为该服务创建C#代理

  • 我是XSD和XML新手,需要了解是否有选项来确保同一元素中一组属性中的任何一个属性都是必需的。 示例: 在这里,我想确保在一组3个属性(上面提到的可选)中,至少有一个属性是必需的。所有都不能是可选的,但是任何一个(也可以是多个)都是必需的。 谢谢,Rajneesh