Я изучаю новые функции 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);