Лямбди


(a, b) -> a.compareTo(b)
(переменные) -> действие
Цього поки що достатньо. Почитати теорію можна тут: посилання разів , посилання два , але мені здається практика набагато веселіше. Пропоную вам вирішити таке завдання: Напишіть калькулятор одним способом. Метод повинен набувати 2 цифрових значень і дещо ще. Код ваш виглядатиме приблизно так:
class Lambda{
public static void main (String[] args) {
}
public static double calculate(){
return null;
}
}
Вам треба вписати 3 параметри в сигнатуру методу calculate
, дописати 1 команду return
і протестувати виклик цього методу main
. Що має вміти цей метод
- Складати;
- множити;
- ділити;
- віднімати;
- обчислювати корінь;
- зводити у ступінь;
- зводити до міри суму аргументів поділену на перше число + 117;
- та всі будь-які інші операції, які зможете придумати.
if-else
;char
як покажчик операції;switch-case
;- і все інше що вам спаде на думку.
- Тільки лямбди, завдання на них.

inputStream
і не OutputStream
. Це інше, це цікавіше. Стрими прийшли на заміну циклам, не повністю, але все ж таки. Подаються вони з девізом "не пояснюй, як робити, пояснюй, що робити". Невеликий приклад стриму:
List<String> myList = Arrays.asList("a1", "a2", "b1", "c2", "c1");
myList.stream()
.filter(s -> s.startsWith("c"))
.map(String::toUpperCase)
.sorted()
.forEach(System.out::println);
Що тут відбувається? Додамо коментарі:
myList.stream() // получить поток
.filter(s -> s.startsWith("c")) //отфильтровать значения, оставить те, что начинаются с «с»
.map(String::toUpperCase) // преобразовать все значения, перевести в верхний регистр
.sorted() // отсортировать по порядку (дефолтный порядо)
.forEach(System.out::println); // вывести каждый элемент на экран
Порівняємо із звичайним циклом:
List<String> toSort = new ArrayList<>();
for(String s : myList){
if(s.startsWith("c")){
toSort.add(s.toUpperCase());
}
}
Collections.sort(toSort);
for(String s : toSort){
System.ouy.println(s);
}
Коли читаєш код, все виглядає страшно, а з коментарями так простіше? Це нормально, я їх також довго не розумів. Ключ до розуміння – практика. Тому починаємо читати сторонні статті та шукати відповіді на свої запитання, можете їх так само задавати тут у коментарі, повноцінну відповідь не дам, але вкажу напрямок. Список завдань від JavaRush, які, я вважаю, чудово підходять для практики стримувань:
-
2208 можна вирішити 1 стримом і 1 return, тобто. тіло методу буде починатися з
return
і далі буде 1 цілий стриму. ВимогаStringBuilder
опустимо. -
1908 - так само можна вирішити 1 стриму і 1 return. Починаючи з прочитання файлу. Запис у файл через стрими, як зробити я не знаю (якщо це можливо), поки робимо ручками. Тобто. Відкриваємо лише 2 потоки (консоль та запис у файл). Читання файлу проводимо через методи, які повернуть нам або аркуш, або одразу стриманий (google і javadoc).
-
1907 - за ідеєю теж можна вирішити в один стрим. На вході стримується ім'я файлу, на виході кількість слів world.
-
1016 - трохи збоченим способом можна вирішити в 1 стриму і 1 return;
-
1821 - дуже легко і в 1 стриму і 1 return.
Ці 2 завдання познайомлять вас із ще одним методом стримувань і ще одним колектором.
-
1925 - можна одним стримом отримати рядок зі словами і потім записати його у файл (чи можна писати у файл зі стриму я не знаю)
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ