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

将包含集合的映射转换为集合大小的映射[闭合]

华修永
2023-03-14

编辑问题以包括所需的行为、特定的问题或错误,以及重现问题所需的最短代码。这将帮助其他人回答这个问题。

这是我的哈希映射:

HashMap<Customer, HashSet<Car>> carsBoughtByCustomers = ...

如何获得一个新的HashMap,它将包含每个客户的汽车数量,即HashSet的大小?

我想不使用循环,但只使用流。

我的尝试:

HashMap<Customer, Integer> result = (HashMap<Customer, Integer>)
    carsBoughtByCustomers.entrySet().stream()
        .map(e -> e.getValue().size());

共有1个答案

唐俊英
2023-03-14

您需要应用终端操作才能从流中获取结果,在这种情况下是Collection(),它需要Collector

是一个中间操作,它生成另一个流,也就是说,它旨在转换流管道,但不是生成结果。因此,像这样的流语句是myMap。entrySet()。流()。map()结果为流,不能分配给map类型的变量。

Map<Customer,Integer> result = carsBoughtByCustomers.entrySet().stream()
            .collect(Collectors.toMap(
                Map.Entry::getKey,
                entry -> entry.getValue().size()
            ));

旁注:

  • 针对Map和Set等接口编写代码,而不是针对HashMap和HashSet等具体类型编写代码,可以使代码更加灵活。参见:“编程到接口”是什么意思
  • 没有终端操作的流是完全有效的,即它将编译(如果代码没有错误),但不会执行
 类似资料:
  • 这是我的哈希图: 如何获得一个新的,它将包含每个客户的汽车数量,即的大小? 我想这样做没有循环,但只使用流。 我的尝试:

  • 假设我有一个名为student的对象列表。对象Student的定义如下 在学生列表中,可以有多个具有相同studentName但不同CourseTaking的学生对象。现在我想把学生名单变成一张studentName和courseTaking的地图,如下所示 关键是studentName,而值是将同一学生的所有课程设置放在一起作为一个集合。我如何使用stream()&collection()来实现

  • 主要内容:集合类型,以下是纠正/补充内容:集合(Collection)是一个将多个对象分组为一个单元的java框架。它用于存储,检索和操作汇总数据。 在JPA中,可以使用集合来持久化包装类和String的对象。JPA允许三种对象存储在映射集合中 - 基本类型,实体和嵌入式类型。 集合类型 根据要求,我们可以使用不同类型的集合来持久化对象。如下所示 - List Set Map 包中包含集合框架的所有类和接口。 以下是纠正/补充内容: 根据

  • 主要内容:集合映射实例,程序输出结果集合(Set)是一个包含唯一元素的接口。 这些元素不保留任何顺序。当需要以无序方式检索唯一元素时,可以使用。 完整的项目目录结构如下所示 - 集合映射实例 在这个例子中,我们将一个对象嵌入到一个实体类中,并将其定义为一个集合类型 - 。 这个例子包含以下步骤 - 第1步: 在包下创建一个实体类,这个类包含员工, 和嵌入对象(员工地址)。注解 表示嵌入对象。 文件:Employee.java 的代码

  • 你可以定义一个新的名或从下拉式菜单中选择导入到现有的表或集合。 【注意】如果你在“目标表”或“目标集合”输入一个新的名,在“是新的”内的框将会自动显示为“是”。 导入多个表或集合时,所有表或集合会显示在列表中。

  • 在对这个话题进行了大量的测试和研究之后,我无法完全解决我的问题。我正在springboot应用程序中使用modelmapper进行实体/DTO映射。我正在尝试配置modelmapper,将一个集合映射到一个简单的DTO对象。我已经创建了一个自定义转换器,它正在按预期工作: 我现在的问题是将此转换器应用于所有“集合”= 如果我直接在模型映射器中添加转换器,它就是不工作。 你对此有什么提示或解决办法吗