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

使用单个流收集映射的多个属性

孟永望
2023-03-14
public class TeamMates{

    private String playerFirstName;
    private String playerLastName;
    private String playerMaidenName;

    //Constructors , getters and Setters    
}
(playerFirstName,("John","Bob"));
(playerLastName,("Joe","Henry"));
(playerMaidenName,("H","K"));

由于我不想多次使用流来单独收集每个属性,也不想使用foreach来收集每个属性,是否有任何方法可以用单个流来获得上述属性。

共有1个答案

凌永逸
2023-03-14

首先,创建一个生成值的getter方法和它们各自的字段名的映射。

// Map.of is available from Java 9. 
// If you are using java 8 you could create the below using a normal HashMap.
Map<String, Function<TeamMates, String>> mapper 
    = Map.of("playerFirstName", TeamMates::getPlayerFirstName,
             "playerLastName", TeamMates::getPlayerLastName,
             "playerMaidenName", TeamMates::getPlayerMaidenName);

现在迭代这个映射器函数,并将每个映射应用到队友列表

// applies getter method on each teammate object and returns the list of strings.
Function<Function<TeamMates, String>, List<String>> listMapper 
    = fn -> list.stream().map(fn::apply).collect(Collectors.toList());

// assume static import of Collectors.toMap
Map<String, List<String>> map = mapper.entrySet().stream()
                                      .collect(toMap(Entry::getKey,
                                                     e -> listMapper.apply(e.getValue())));

我还建议将您的类命名为Teammate而不是Teammate,因为该类代表一个团队成员实体。

 类似资料:
  • 假设我有以下工作的lambda表达式: 我想在过滤器语句之前创建一个具有2个值的流。所以我想做一个映射,但仍然保留原始值。我想实现这样的事情: 这可能与Java8流?我已经看了收集(GroupingBy()),但仍然没有成功。

  • 你好,我的问题与Java8非常相似:流映射同一个流中的两个属性,但由于某些原因,我无法让代码正常工作。 所以就像这个问题一样,假设我有一个班级 所以我想从列表中组合这些

  • 我想通过调用来映射列表中的每个条目,它返回多个条目,然后将结果作为列表收集。 如果没有溪流,我会这样做: 我如何用流来完成这件事呢?这将给出一个编译错误:

  • 问题内容: 我上这堂课 然后,我有该类对象的列表。 有没有一种方法创建一个包含from 和as值的索引? 到目前为止,这是我尝试过的。 但这给我一个,我想要一个。 我已经尝试过使用方法-它可以工作-但我确定必须有一种方法可以在一个衬里中进行操作- 或者至少仅使用和方法 问题答案: 似乎没有平面映射收集器可在Java8中用作下游,但已被Java9提出并接受:https ://bugs.openjdk

  • 问题内容: 说我有以下代码 我有一些可能会返回的函数,并将其应用于流的元素。然后,我想确保将所有结果改为默认值。与使用前面的示例定义了辅助变量并在lambda表达式中使用代码块的示例相比,使用下面的示例中的两个映射有什么明显的区别? 是否存在避免在lambda函数中使用块语句的标准? 问题答案: 都可以。选择一个对您来说更易读的。如果计算能够自然分解,就像这样,那么多个映射可能更易读。某些计算不会

  • 问题内容: 我认为我的问题与此相似:如何实现具有多个键的Map?但有一个重要的区别。在这个问题中(如果我对它的理解是正确的,请告诉我是否正确),这些键应该总是唯一的。我想要一个Map形式: MyMap ,其中的键不一定是唯一的。如果那没有任何意义,我基本上想要一个二维数组,而不是通过坐标对引用元素,而是通过对象对引用它们。 是否有人对可以在其中工作的图书馆或自己实现此想法的好方法有任何想法?就库而