报告可以自动转换为经典循环的 Stream API 链、Iterable.forEachMap.forEach 调用。

示例:


  String joinNonEmpty(List<String> list) {
    return list.stream() // 流可以转换为循环
      .filter(s -> !s.isEmpty())
      .map(String::trim)
      .collect(Collectors.joining(", "));
  }

在应用快速修复后:


  String joinNonEmpty(List<String> list) {
    StringJoiner joiner = new StringJoiner(", ");
    for (String s : list) {
      if (!s.isEmpty()) {
        String trim = s.trim();
        joiner.add(trim);
      }
    }
    return joiner.toString();
  }

请注意,有时此检查可能会导致轻微的语义变化。 必须特别注意短路,因为流短路未指定读取的实际元素数。

配置检查:

使用 通过 Stream.iterator() 迭代未知的流源 选项来建议转换来源无法识别的流。 在这种情况下,迭代器将从流中创建。 例如,选择复选框时,此处将建议转换:


  List<ProcessHandle> handles = ProcessHandle.allProcesses().collect(Collectors.toList());

在这种情况下,结果如下:


  List<ProcessHandle> handles = new ArrayList<>();
  for (Iterator<ProcessHandle> it = ProcessHandle.allProcesses().iterator(); it.hasNext(); ) {
    ProcessHandle allProcess = it.next();
    handles.add(allProcess);
  }

2017.1 的新功能