Почему Java 8 будет ввести лямбда?
Перед Java8 появиться, если вы хотите, чтобы перейти к другой части кода в методе очень удобно. Вы будете почти невозможно пройти вокруг блока, потому что Java является объектно-ориентированным языком, поэтому вы должны создать объект принадлежит к классу, его метода, чтобы поместить блок кода, который вы хотите передать.
Давайте посмотрим на два очень типичный пример, нить компаратор конфигурации:
Структура резьбы:
Когда мы хотим выполнить некоторый код логики в другом потоке, как правило, в коде реализовать метод интерфейса Runnable прогон, который, как показано ниже:
public static void main(String[] args) {
myThread t = new myThread();
}
class myThread implements Runnable {
@Override
public void run() {
System.out.println("放入你想执行的代码");
}
}
Вы пишете этот код искать , чтобы открыть новый поток для выполнения пользовательского кода , чтобы сделать это вы создаете MyThread .
Затем мы смотрим на строительство компаратора:
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(5);
list.add(1);
list.add(4);
list.add(3);
Comparator<Integer> comparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
};
Collections.sort(list, comparator);
}
Метод сортировки будет продолжать вызывать метод сравнения, порядок элементов не переставляет , пока не заказано до сих пор. Пишет компаратор передаются в методе объекта рода Коллекцию логики сравнения сегмента кода, код будет интегрирован в логику сортировки, это вы написали класс и метод .
Эти два примера вы увидите их сходство, передавая кусок кода других абонентов (пул потоков или метод сортировки), этот код будет вызываться в новом методе.
Однако, прежде чем Java8 появиться, если вы хотите, чтобы перейти к другой части коды в методе очень удобно, потому что Java является объектно-ориентированным языком, так что вы хотите построить принадлежит к классу объектов, одним из его метод, чтобы место, куда вы хотите, чтобы передать блок кода. В то время как в некоторых других языках, могут быть непосредственно перенесены блоки кода, такие как JS. С этой целью, Ja решили присоединиться к синтаксической экспрессии сахара лямбды.
преобразование лямбда
Для входящего блока сравнения, наша цель состоит в том, чтобы сравнить логический раздел входящий, использование лямбда-выражения может быть:
Синтаксис выражений Лямбда: Параметр -> выражение, если вы хотите, чтобы входящий код не представлен выражением, вы можете использовать параметры -> {} множество выражений. Если параметры не должны быть переданы, он может быть использован () -> форма выражения.
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(5);
list.add(1);
list.add(4);
list.add(3);
Collections.sort(list, (one,two)->{
System.out.println("one="+one);
System.out.println("two="+two);
return two - one;
});
}
Компилятор разбирает одну и две являются эталонными методами сравнения оригинального интерфейса, и автоматически присваиваются типа Integer.
Для построения потоков, наша цель состоит в том, чтобы передать код для потока исполнения, использование лямбда-выражения можно сделать следующее:
public static void main(String[] args) {
new Thread(() -> {
for (int i = 0; i < 100; i++) {
System.out.println("这是一个线程" + i);
}
}).start();
for (int i = 100; i < 200; i++) {
System.out.println("这是主线程" + i);
}
}
Из приведенных выше примеров, с лямбда-выражения, значительно более простой блок передачи, для определенного сценария использования, например, пара API, лямбда-код позволит значительно улучшить эффективность и быть более традиционным способом легко читать (конечно, что вы знаете синтаксис лямбда-выражений).
Мы по-прежнему рекомендуем использование практической работы, можно получить производительность, что материя, но вы думаете, лямбда-выражение потери производительности запросов, чем стоимость небольшого MySQL слишком много.