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

使用JavaCollectors.toMap对具有特定字段的对象进行分组

越嘉石
2023-03-14

我想根据性别将Person对象与收集器分组。toMap()函数如下所述,但这并不像我预期的那样工作。

class Person{
   private Integer id;
   private String gender;
   private String name;
   public String getGender(){
       return gender;
   }
   public Person(Integer id, String gender, String name){
       this.id=id;
       this.gender=gender;
       this.name=name;    
   }
}


public static void main(String[]args){
   List<Person> persons=new ArrayList<>();
   persons.add(new Person(1,"Man","John"));
   persons.add(new Person(2,"Man","Steve"));
   persons.add(new Person(3,"Women","Linda"));
   persons.add(new Person(4,"Man","Bill"));
   persons.add(new Person(5,"Women","Siti"));
   persons.add(new Person(6,"Man","Buzzer"));

   Map<String,List<Person>> filtered=persons
            .stream()
            .collect(Collectors.toMap(Person:getGender:Function.identity()));

}

错误提示

不兼容类型:推理变量U具有不兼容的边界相等约束:列出下界:Person,T#2,T#1,其中U,T#1,K,T#2是类型变量:U扩展方法中声明的对象

的类型

有人能解释这个错误吗?

共有2个答案

万高轩
2023-03-14

Collectors.toMap()并不适合您想要做的事情。相反,请尝试使用Collectors.groupingBy()

Map<String,List<Person>> filtered = persons.stream().collect(Collectors.groupingBy(Person::getGender));
柴俊捷
2023-03-14

试试这个:

final var filtered = persons.stream().collect(Collectors.groupingBy(Person::getGender));
 类似资料:
  • 问题内容: 如何按其字段之一(例如或)对对象数组进行排序? 问题答案: 使用usort,这是从手册改编而成的示例: 您还可以将任何callable用作第二个参数。这里有些例子: 使用匿名函数(来自PHP 5.3) 从班级内部 使用箭头函数(来自PHP 7.4) 另外,如果要比较数字值,则应使用“比较”功能。

  • 如果我试图反序列化一个JSON字符串,该字符串缺少object类中的一个字段,那么在创建对象时,该字段将被设置为null。当发生这种情况时,我需要Jackson抛出一个异常,这样我就不必在每个对象中实现方法;即JSON字符串输入必须定义了类中的所有字段,或者抛出。 考虑到我的配置,这是可能的吗?

  • 我有一个基于时间戳对对象进行排序的场景。课程如下: 对于一个员工来说,有2种可能1、它会有一个地址列表。2.地址列表可以为空 address类有一个字段,它可以有诸如Residence、Office、ForeignHome之类的值。 每个都可以有地址列表,一个地址是住宅,另一个是办公室等。可以有多个居住地址,但只能有一个办公地址。 我想根据地址的起始日期对员工列表进行排序,地址类型=办公室。 我写

  • 问题内容: 我有以下JSON字符串: 我需要将值存储在单独的字符串中。 这是我到目前为止所拥有的,但这只是为我提供了整个JSON字符串,而不是特定的imgurl字段。 是JSON字符串。这是我的数据类: 问题答案: 解析这种简单的结构时,不需要专用的类。 解决方案1: 要使用gson从字符串中获取imgurURL,可以执行以下操作: 这使用原始解析到JsonObject中。 解决方案2: 另外,您

  • 这是我目前所拥有的,但这只给了我整个JSON字符串,而不是特定的imgurl字段。 是JSON字符串。下面是我的数据类:

  • 问题内容: 我的数组是这样的: 我想将其转换为: 因此,基本上,分组依据。 我尝试着: 我只是不知道如何处理相似组值的分组。 问题答案: 首先,在JavaScript中,使用遍历数组通常不是一个好主意。 因此,您可以尝试执行以下操作: 在这里使用中间对象有助于加快处理速度,因为它可以避免嵌套循环搜索数组。另外,因为使用迭代遍历对象(而不是数组)是合适的。 附录 FWIW,如果要避免在结果数组中出现