В Java 8 реализовано потоковое API, лямбда и краткое сравнение кода с Java 7 - PullRequest
0 голосов
/ 17 мая 2019

Я изучаю новые функции Java 8 и столкнулся с одной ситуацией, когда я не смог убедить своего интервьюера в том, что java 8 предоставляет более лаконичный код, чем старая версия java.Я привел пример функционального интерфейса и интерфейса компаратора, в котором класс не должен реализовывать интерфейс.Используя лямбда-выражение, мы можем напрямую обеспечить реализацию метода, как показано ниже в примере Example1.Я объяснил ему, как с помощью java8 сократилось число строк.

Я также привел пример интерфейса Comparator, в котором мы можем напрямую реализовать интерфейс Comparator с помощью лямбда-выражения.Но он сказал, что если мы реализуем интерфейс Comparator с каким-то классом, то я могу использовать его повторно, используя лямбда-выражение, и мне приходится снова и снова писать логику всякий раз, когда мне нужно выполнить сортировку.Поэтому я не знал, как объяснить, как java 8 предоставляет краткий код, потому что согласно его описанию он был прав.

Для Stream API мы также можем сортировать элементы, так почему мы должны использовать Stream API Java8 для сортировки, в то время как коллекция имеет метод Collections.sort.Если я использую Stream API для сортировки, тогда я собираю все элементы в новом List, а использование Collections.sort сортирует существующий список, тогда почему мы должны использовать Stream API?См. Пример 3.

Так что я не смог понять, как Java8 предоставляет лаконичный код и чем полезен потоковый API, или почему я должен использовать Stream API.

Я провел поиск в Google, ноЯ не нашел удовлетворительных ответов.

//Exaple 1
//Traditional Way
interface SampleInterface {
    public void sampleMethod();
}

public class SampleClass implements SampleInterface {
    @Override
    public void sampleMethod() {
        // Implementation Logic
    }
}

//Using Lambda expression and Functional Interface
@FunctionalInterface
interface SampleInterface {
    public void sampleMethod();
}

public class SampleClass {
    public static void main(String[] args) {
        SampleInterface sf = () -> {System.out.println("Implementation of interface method");};
    }
}


//Example 2
Comparator<Student> c = (s1, s2) -> {return (s1.age < s2.age ? -1 : (s1.age > s2.age) ? 1 : 0 );};


//Example 3
//Using Stream API
List<Employee> newList = empList.stream().sorted((v1, v2) -> (v2.id < v1.id) ? -1 : (v2.id > v1.id) ? 1 : 0).collect(Collectors.toList());

//Using comparator 
Collections.sort(list, comparator);

1 Ответ

3 голосов
/ 17 мая 2019

Но он сказал, что если мы реализуем интерфейс Comparator с каким-то классом, то я могу использовать его повторно, используя лямбда-выражение. Мне приходится снова и снова писать логику всякий раз, когда мне нужно выполнить сортировку.

Вам просто нужно перехватить лямбду в переменной, как это было сделано в первом примере, и использовать ее везде, где вы хотите.Этот аргумент очень распространен среди 7 сопротивляющихся разработчиков, сначала скажите ему, что вам не нужно создавать класс для одного экземпляра;во-вторых, что код компаратора находится в нужном месте, так что для чтения того, как сортируется коллекция, не нужно искать определение класса сортировки;в-третьих, компилятор лучше всего оптимизирует при использовании лямбда-выражений ...

Для Stream API мы также можем сортировать элементы, так почему мы должны использовать Stream API Java8 для сортировки

Сортировка - это одна из тех функций, которые не подходят для потокового POV.Он дан только для того, чтобы не прерывать поток: создать поток, собрать, отсортировать, снова выполнить поток и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...