You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java Stream的.map中实现首字母大写并对列表排序?

嘿,这问题其实很简单,你之前写的单个字符串首字母大写的逻辑完全可以直接搬到Stream的map操作里!我给你完整的解决方案,再拆解下细节:

完整实现代码

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class NameSortingExample {
    public static void main(String[] args) {
        List<String> topNames2017 = Arrays.asList( "Amelia", "Olivia", "emily", "Isla", "Ava", "oliver", "Jack", "Charlie", "harry", "Jacob" );
        
        List<String> sortedCapitalizedNames = topNames2017.stream()
                // 把你之前的首字母大写逻辑放进lambda里
                .map(name -> name.substring(0, 1).toUpperCase() + name.substring(1))
                // 按自然字母顺序排序
                .sorted()
                // 收集成最终的列表
                .collect(Collectors.toList());
        
        // 打印验证结果
        sortedCapitalizedNames.forEach(System.out::println);
    }
}

关键细节说明

  1. map里的首字母大写逻辑:
    Stream的map方法就是用来逐个转换元素的,你之前写的substring(0,1).toUpperCase() + substring(1)完全可以直接封装成lambda表达式传给map。这个逻辑会保留原字符串除首字母外的大小写,比如原字符串是"emily"会变成"Emily",原字符串是"Amelia"则保持不变。

  2. 进阶:统一其余字母为小写:
    如果希望不管原字符串其余字母的大小写,都统一转为小写(比如把"OLIVER"变成"Oliver"),可以修改map的逻辑:

    .map(name -> name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase())
    
  3. 排序的小优化:
    默认的sorted()是按字符串的自然顺序排序(大小写敏感,大写字母会排在小写前面),如果想要忽略大小写排序(比如让"ava"和"Ava"排在同一位置),可以改用:

    .sorted(String.CASE_INSENSITIVE_ORDER)
    
  4. 代码复用:抽成单独方法:
    如果这个首字母大写的逻辑需要在多处使用,建议抽成一个工具方法,用方法引用让代码更清晰:

    private static String capitalizeFirstLetter(String name) {
        // 加个空值判断更健壮
        if (name == null || name.isEmpty()) {
            return name;
        }
        return name.substring(0, 1).toUpperCase() + name.substring(1);
    }
    

    然后在map里这样用:

    .map(NameSortingExample::capitalizeFirstLetter)
    

内容的提问来源于stack exchange,提问作者Workkkkk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:41:07