在 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());