如何改写IntStream遍历代码以移除未使用的number变量?
解决方案
你可以通过以下几种方式改写代码,避免使用未用到的变量:
1. 使用下划线作为未使用参数的占位符(Java 8适用)
在Java 8中,可用下划线_表示未使用的参数,明确告知编译器该参数无需被使用:
IntStream.range(0, 10).forEach(_ -> new Thread(r).start());
注意:Java 9及以后版本中,下划线
_被列为保留关键字,不能再用作变量名,此写法在高版本Java中会报错。
2. 改用普通for循环
如果不需要依赖流式API,直接用传统for循环更直观,完全不存在未使用变量的问题:
public static void main(String[] args) { UnsafeThreadClass counter = new UnsafeThreadClass(); Runnable r = () -> { try { System.out.println(counter.getValue() + " : Thread - " +Thread.currentThread()); } catch (InterruptedException e) { e.printStackTrace(); } }; // 替换原流式代码为普通循环 for (int i = 0; i < 10; i++) { new Thread(r).start(); } }
3. 使用Stream.generate配合limit
通过生成包含10个线程实例的流,直接启动每个线程,全程不需要多余参数:
public static void main(String[] args) { UnsafeThreadClass counter = new UnsafeThreadClass(); Runnable r = () -> { try { System.out.println(counter.getValue() + " : Thread - " +Thread.currentThread()); } catch (InterruptedException e) { e.printStackTrace(); } }; // 生成10个线程并启动 Stream.generate(() -> new Thread(r)) .limit(10) .forEach(Thread::start); }
4. 简化lambda参数名(可选)
如果不想改动流式结构,也可以把参数名改成通用占位符(比如i),虽仍有参数,但能暗示其未被使用,代码更简洁:
IntStream.range(0, 10).forEach(i -> new Thread(r).start());
内容的提问来源于stack exchange,提问作者Punter Vicky
相关产品推荐
相关产品推荐

