别再只会new对象了!Java里那些“不起眼但超实用”的小技巧

36 阅读2分钟

刚入门Java时,我们总忙着敲 Hello World 、new对象、写循环,但想要从“能用”到“好用”,就得扒一扒那些藏在基础里的进阶小细节——今天聊几个不起眼但能让代码瞬间变优雅的知识点,新手也能秒懂~

一、告别if-else嵌套:用Optional拯救空指针

空指针(NullPointerException)堪称Java程序员的“噩梦”,以前我们总靠层层if判断防坑:

// 传统写法:又丑又容易漏
String userName = null;
if (user != null) {
    UserInfo info = user.getInfo();
    if (info != null) {
        userName = info.getName();
    }
}
userName = userName == null ? "匿名用户" : userName;

 

而Java 8的Optional能把嵌套变成链式调用,直接优雅兜底:

// Optional写法:一行搞定空值处理
String userName = Optional.ofNullable(user)
                          .map(User::getInfo)
                          .map(UserInfo::getName)
                          .orElse("匿名用户");

 

核心逻辑: ofNullable 包装可能为空的对象, map 安全取值, orElse 指定空值默认值,再也不用写一堆if判空!

二、循环的“天花板”:Stream流式处理

还在靠for循环遍历集合、筛选数据?Stream能把“遍历-筛选-处理”打包成一行代码,可读性直接拉满:

List<String> fruitList = Arrays.asList("apple", "banana", "cherry", "apple");

// 传统for循环:去重+筛选长度>5+转大写
Set<String> result = new HashSet<>();
for (String fruit : fruitList) {
    if (fruit.length() > 5) {
        result.add(fruit.toUpperCase());
    }
}

// Stream写法:链式调用,逻辑一目了然
Set<String> streamResult = fruitList.stream()
                                    .filter(f -> f.length() > 5)
                                    .map(String::toUpperCase)
                                    .collect(Collectors.toSet());

 

Stream不仅简洁,还支持并行处理( parallelStream() ),大数据量下效率直接起飞~

三、枚举的正确打开方式:别只当“常量容器”

很多人用枚举就定义几个常量,但枚举其实能加方法、实现接口,堪称“增强版常量”:

  
// 普通枚举:只能存值
enum Season {
    SPRING, SUMMER, AUTUMN, WINTER
}

// 进阶枚举:带属性+方法,逻辑内聚
enum Season {
    SPRING("春天", "春暖花开"),
    SUMMER("夏天", "烈日炎炎"),
    AUTUMN("秋天", "秋高气爽"),
    WINTER("冬天", "白雪皑皑");

    private final String name;
    private final String desc;

    // 构造方法(必须私有)
    Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    // 自定义方法
    public String getDesc() {
        return desc;
    }
}

// 使用:直接调用方法,无需额外判断
System.out.println(Season.SPRING.getDesc()); // 输出:春暖花开

 

枚举的构造方法默认私有,不用担心被外部实例化,比静态常量更安全~