Понизить потоки Java 8 до циклов Java 7 в Intellij IDEA - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть некоторый код, написанный с использованием функций Java 8, что означает потоки и лямбды.Теперь я должен повторно использовать такой код в проекте, который использует Java 7. Есть ли возможность автоматического рефакторинга кода с использованием IntelliJ?

Например, мне нужно реорганизовать некоторый код, который выглядит следующим образом, впростая for / while петля.

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

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Вам действительно не нужно так много кода для текущей логики (рефакторинг здесь кажется мне неоптимальным и менее читабельным, по крайней мере.)

То, что также работает, просто использует Set и работаетвокруг его размера:

Set<String> set = new HashSet<>(values);
System.out.println(set.size() > 2 ? 2 : set.size());
0 голосов
/ 07 февраля 2019

Да, IntelliJ имеет опцию рефакторинга «Заменить цепочку API потока с помощью цикла».Он появляется после нажатия Alt+Enter после наведения курсора на метод Arrays.stream():

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 или выше.

...