Java8中使用流进行多个操作的map方法

4

给定一组顾客名单,我需要创建另一个列表,其中包含顾客名字的大写形式。以下是 Java 代码-

List<String> getFirstNames(List<Customer> customers)
{
    List<String> firstNames = new ArrayList<>();
    for(Customer customer: customers) {
        firstNames.add(StringUtils.uppercase(customer.getFirstName());
    }
    return firstNames;
}

我该如何在Java8中使用Lambda表达式来编写这个方法。 我可以使用流式处理,在以下方式中转换为列表-

customers.stream().map(Customer::getFirstName).collect(Collectors.toList());

但是,我该如何使用这个来将firstName转换为大写字母呢?


5
使用方法引用:customers.stream().map(Customer::getFirstName).map(StringUtils::uppercase).collect(toList()); 可以将一个 Customer 类型的流映射为一个大写的名字字符串列表。 - Sotirios Delimanolis
1
有什么理由使用StringUtils.uppercase(customer.getFirstName())而不是简单地使用customer.getFirstName().toUpperCase()吗? - Holger
@SotiriosDelimanolis 我们不应该像答案中一样在一行中完成它吗?而不是分为两次迭代? - Optimus Prime
2个回答

4
最简单的方法是编写自己的lambda表达式,以帮助您进行转换为大写字母:
 List<String> firstNames = customers.stream()
                         .map(customer->StringUtils.uppercase(customer.getFirstName()))
                        .collect(Collectors.toList());

1
即使在您的代码中,您也正在获取客户名称,然后将其转换为大写。
      List<String> firstNames = customers.stream()
                    .map(customer-> customer.getFirstName())
                    .map(firstName -> StringUtils.uppercase(firstName))
                    .collect(Collectors.toList())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接