有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Intellij IDEA中将Java8流降级为Java7循环

我有一些使用Java8特性编写的代码,这意味着流和lambda。现在,我必须在一个使用Java7的项目中重用这样的代码。是否有可能使用IntelliJ自动重构代码

例如,我必须将一些如下所示的代码重构为一个简单的for/while循环

Arrays.stream(values)
      .distinct()
      .limit(2)
      .count();

共 (2) 个答案

  1. # 1 楼答案

    是的,IntelliJ有“用循环替换流API链”重构选项。将光标放置在Arrays.stream()方法上,按Alt+Enter后弹出:

    enter image description here

    它将生成如下代码:

    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或更高

  2. # 2 楼答案

    不过,对于当前的逻辑,您真的不需要那么多代码(这里的重构似乎不是最优的,至少对我来说可读性较差)

    同样有效的方法是简单地使用Set并围绕其大小进行操作:

    Set<String> set = new HashSet<>(values);
    System.out.println(set.size() > 2 ? 2 : set.size());