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

如何使用流转换地图值

阎慈
2023-03-14

我有一个任务:返回一个公司地图,其中键是它的名称,值是存储为String的员工列表,由firstNamelastName组成,用空格分隔。这是我的解决方案和它的工作罚款:

    Map<String, List<String>> getUserPerCompanyAsString() {
        return getCompanyStream()
                .collect(Collectors.toMap(Company::getName, company ->  getUserNames(company.getUsers())));
    }

    private List<String> getUserNames(List<User> users) {
        return users.stream()
                .map(user -> user.getFirstName() + " " + user.getLastName())
                .collect(Collectors.toList());
    }

public class Company {
    private final String name;
    private final List<User> users;
}

public class User {
    private final String firstName;
    private final String lastName;
    private final Sex sex;
    private final int age;
    private final List<Account> accounts;
    private final List<Permit> permits;
}

所以我的问题是,如何转换列表


共有2个答案

澹台志诚
2023-03-14

我知道你想利用助手的方法。一种更简洁的方法是将getUserNames方法包含在公司中,这比将此逻辑挂在收集器中更有意义。

解决方案也会更具可读性

Map<String, List<String>> getUserPerCompanyAsString() {
    return getCompanyStream().collect(
        Collectors.toMap(
            Company::getName,
            Company::getUserNames
        )
    );
}



public class Company {
    private final String name;
    private final List<User> users;

    // Constructor making sure users is not null

    private List<String> getUserNames() {
        return this.users
                   .stream()
                   .map(User::getFullName)
                   .collect(Collectors.toList());
    }
}

public class User {
    private final String firstName;
    private final String lastName;
    
    // Etc.

    public String getFullName() {
        return firstName + " " + lastName;
    }
}
赫连秦迟
2023-03-14

解决方案

多亏了托马斯的建议,我不需要助手就能解决这个问题:

    Map<String, List<String>> getUserPerCompanyAsString() {
        return getCompanyStream()
                .collect(Collectors.toMap(Company::getName, company -> company.getUsers().stream()
                                .map(user -> user.getFirstName() + " " + user.getLastName())
                                .collect(Collectors.toList())));
 类似资料:
  • 我正在尝试创建一个简单的解析util,它转换一个两列CSV文件并将其放入一个映射。 如您所见,我正在创建一个字符串流,用逗号分隔每一行,并将其转换为字符串数组,最后将键映射到索引0,将值映射到索引1。 出于某种原因,当我运行这个测试时,实际值为null。我排除了无效的文件路径,因为它在另一个单元测试中运行良好,并且键值出现在CSV中。我已经盯着它看了几个小时了,我想也许有人能指出我的错误。 此外,

  • 问题内容: 我有一个的关键无非是像“123”等我得到的数值,因为这个数值是从UI在我的JSF组件来数值。我不想更改UI组件的合同。 现在,我想基于上面创建一个,我在类中看到了一些方法,但是所有方法都集中在转换值而不是键上。 有没有更好的转换方法? 问题答案: Java 8的更新 您可以使用流来执行此操作: 假定所有键都是s的有效字符串表示形式。另外,转换时可能会发生冲突;例如,与两个地图。 我认为

  • 问题内容: 我需要将Java转换为的实例(包括地图内容) 我应该怎么做才能使此代码可编译? 问题答案: 从Collectors.toMap(…)javadoc: 例如:

  • 我在我的颤振应用程序中使用包dio。从我的api问题中获取响应<代码>响应。数据获取类型

  • 我有这样一个代码: 你能帮我完成代码库吗?

  • 问题内容: 如何转换 为? 这不起作用: 问题答案: 如果您只包含,则可以这样操作: 如果不是,则可以替换 为。