在 Intellij IDEA 中将 Java 8 个流降级为 Java 7 个循环
Downgrade Java 8 streams to Java 7 loops in Intellij IDEA
我有一些代码使用 Java 8 个特性编写,这意味着流和 lambda。现在,我必须在使用 Java 的项目中重用此类代码 7. 是否可以使用 IntelliJ 自动重构代码?
例如,我必须将一些如下所示的代码重构为一个简单的 for
/ while
循环。
Arrays.stream(values)
.distinct()
.limit(2)
.count();
是的,IntelliJ 有 "Replace Stream API chain with loop" 重构选项。将光标放在Arrays.stream()
方法上后按Alt+Enter
弹出:
它将生成如下代码:
long count = 0L;
long limit = 2;
Set<Integer> uniqueValues = new HashSet<>();
for (int i : new int[]{1, 2, 3}) {
if (uniqueValues.add(i)) {
if (limit-- == 0) break;
count++;
}
}
System.out.println(count);
要使选项生效,项目语言级别必须为 8 级或更高。
尽管当前逻辑你真的不需要那么多代码(这里的重构似乎不是最优的,至少对我来说可读性较差。)
同样有效的是简单地使用 Set
并解决它的大小:
Set<String> set = new HashSet<>(values);
System.out.println(set.size() > 2 ? 2 : set.size());
我有一些代码使用 Java 8 个特性编写,这意味着流和 lambda。现在,我必须在使用 Java 的项目中重用此类代码 7. 是否可以使用 IntelliJ 自动重构代码?
例如,我必须将一些如下所示的代码重构为一个简单的 for
/ while
循环。
Arrays.stream(values)
.distinct()
.limit(2)
.count();
是的,IntelliJ 有 "Replace Stream API chain with loop" 重构选项。将光标放在Arrays.stream()
方法上后按Alt+Enter
弹出:
它将生成如下代码:
long count = 0L;
long limit = 2;
Set<Integer> uniqueValues = new HashSet<>();
for (int i : new int[]{1, 2, 3}) {
if (uniqueValues.add(i)) {
if (limit-- == 0) break;
count++;
}
}
System.out.println(count);
要使选项生效,项目语言级别必须为 8 级或更高。
尽管当前逻辑你真的不需要那么多代码(这里的重构似乎不是最优的,至少对我来说可读性较差。)
同样有效的是简单地使用 Set
并解决它的大小:
Set<String> set = new HashSet<>(values);
System.out.println(set.size() > 2 ? 2 : set.size());