如何将打印字符串长度的lambda表达式改为使用::操作符实现
Java lambda表达式转::方法引用实现打印字符串长度的方案
原代码逻辑
你提供的原始lambda写法功能为遍历字符串数组,逐个打印每个字符串的长度:
String[] arr = new String[]{"1", "234", "56"}; Arrays.stream(arr).forEach(s -> System.out.println(s.length()));
转换为::方法引用的实现方式
方法引用(::操作符)是lambda的语法糖,仅当lambda逻辑恰好对应单个已存在方法的调用时,可以直接替换。你提供的原始lambda包含「取字符串长度」「打印长度」两个连续方法调用,因此可以通过两种方式转换:
方案1:拆分两步操作(最常用,可读性最高)
把两个操作拆分到流的不同环节,分别使用方法引用:
- 用
String::length引用String类的实例方法length(),将字符串映射为对应长度 - 用
System.out::println引用PrintStream实例out的println方法,打印长度值
完整代码如下:
String[] arr = new String[]{"1", "234", "56"}; Arrays.stream(arr) // 等价于.map(s -> s.length()) .map(String::length) // 等价于.forEach(len -> System.out.println(len)) .forEach(System.out::println);
方案2:自定义方法后引用
如果不想拆分流操作,也可以把打印字符串长度的逻辑封装成独立方法,再直接引用该方法:
- 先在当前类中定义接收字符串参数的打印方法:
private static void printStrLen(String s) { System.out.println(s.length()); }
- 调用时直接引用该静态方法,注意将示例中的
YourClassName替换为实际的类名:
String[] arr = new String[]{"1", "234", "56"}; Arrays.stream(arr).forEach(YourClassName::printStrLen);
内容的提问来源于stack exchange,提问作者orubt
相关产品推荐
相关产品推荐

