如何编写更简洁的Java代码获取字符串中最长偶长单词的长度?
优化Java代码:获取字符串中偶长单词的最长长度
需求回顾
编写程序返回给定字符串中长度为偶数的单词的最长长度。
原代码
用户提供的实现代码如下:
Optional<Integer> opInt = Arrays.asList(s.split("\\s")).stream() .map(l -> l.length()) .filter(l -> l % 2 == 0) .sorted(Comparator.reverseOrder()) .findFirst(); System.out.println(opInt.get());
更简洁高效的优化版本
可以通过以下方式简化代码,同时提升性能:
int maxEvenLen = Stream.of(s.split("\\s")) .mapToInt(String::length) .filter(len -> len % 2 == 0) .max() .orElse(0); // 无符合条件的单词时返回0,也可改用orElseThrow()抛出异常 System.out.println(maxEvenLen);
优化点说明
- 直接用
Stream.of(s.split("\\s"))替代Arrays.asList(s.split("\\s")).stream(),省去List转换步骤,代码更紧凑 - 改用
mapToInt(String::length)生成IntStream,避免自动装箱/拆箱的开销,同时方法引用让代码更简洁 - 用
max()替代sorted(Comparator.reverseOrder()).findFirst():排序的时间复杂度是O(n log n),而max()只需一次遍历(O(n)),逻辑更直接且性能更优 - 用
orElse()/orElseThrow()安全处理无符合条件单词的场景,避免原代码中get()可能抛出的NoSuchElementException
内容的提问来源于stack exchange,提问作者Anurath Mane
相关产品推荐
相关产品推荐

