![Page 1: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/1.jpg)
![Page 2: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/2.jpg)
Краткое содержание
![Page 3: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/3.jpg)
Любите нас в Твиттере!
#jpoint#java8puzzlers@tagir_valeev@jekaborisov@jbaruch@real_jbaruch (мы не знаем, кто это, но он ОК)
![Page 4: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/4.jpg)
История про забытые яйца
![Page 5: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/5.jpg)
Что выведет следующий код?
A. молоко/хлеб/колбасаB. молоко/хлеб/колбаса/яйца, яйца ещё!C. молоко/хлеб/колбаса/ConcurrentModificationExceptionD. ConcurrentModificationException
List<String> list = new ArrayList<>();list.add("молоко");list.add("хлеб");list.add("колбаса");Stream<String> stream = list.stream();list.add("яйца, яйца ещё!");stream.forEach(System.out::println);
![Page 6: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/6.jpg)
![Page 7: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/7.jpg)
Late binding же
List<String> list = new ArrayList<>();list.add("молоко");list.add("хлеб");list.add("колбаса");Stream<String> stream = list.stream();list.add("яйца, яйца ещё!");stream.forEach(System.out::println);
![Page 8: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/8.jpg)
Kолбасы не надо
![Page 9: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/9.jpg)
Что выведет следующий код?
A. молоко/хлеб/колбасаB. молоко/хлеб/колбаса/яйца, яйца ещё!C. молоко/хлеб/колбаса/ConcurrentModificationExceptionD. молоко/хлеб/яйца, яйца ещё!
List<String> list = new ArrayList<String>();list.add("молоко");list.add("хлеб");list.add("колбаса");list = list.subList(0, 2); //не надо колбасу!Stream<String> stream = list.stream();list.add("яйца, яйца ещё!");stream.forEach(System.out::println);
![Page 10: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/10.jpg)
![Page 11: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/11.jpg)
• Баг!!!
![Page 12: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/12.jpg)
Сага о палаче
![Page 13: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/13.jpg)
В чём разница между строчками 1 и 2?
A. 1 компилируется, 2 нетB. 2 компилируется, 1 нетC. Что в лоб, что по лбу, обе нормально сработают.D. Без разницы, обе не компилируются.
public void killAll(){ExecutorService ex = Executors.newSingleThreadExecutor();List<String> sentence = Arrays.asList("Казнить");ex.submit(() -> Files.write(Paths.get("Приговор.txt"), sentence) ); // 1ex.submit(() -> { Files.write(Paths.get("Приговор.txt"), sentence); }); // 2
}
![Page 14: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/14.jpg)
Точкисзапятыми– зло!
![Page 15: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/15.jpg)
В чём разница между строчками 1 и 2?
A. 1 компилируется, 2 нетB. 2 компилируется, 1 нетC. Что в лоб, что по лбу, обе нормально сработают.D. Без разницы, обе не компилируются.
public void killAll(){ExecutorService ex = Executors.newSingleThreadExecutor();List<String> sentence = Arrays.asList("Казнить");ex.submit(() -> Files.write(Paths.get("Приговор.txt"), sentence) ); // 1ex.submit(() -> { Files.write(Paths.get("Приговор.txt"), sentence); }); // 2
}
![Page 16: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/16.jpg)
@FunctionalInterfacepublic interface Runnable {
public abstract void run();}
@FunctionalInterfacepublic interface Callable<V> {
V call() throws Exception;}
public void killAll(){ExecutorService ex = Executors.newSingleThreadExecutor();List<String> sentence = Arrays.asList("Казнить");ex.submit(() -> Files.write(Paths.get("Приговор.txt"), sentence) ); // 1ex.submit(() -> { Files.write(Paths.get("Приговор.txt"), sentence); }); // 2
}
![Page 17: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/17.jpg)
Безумный Макс
![Page 18: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/18.jpg)
Что будет?
A. Ошибка компиляцииB. Вылетит с исключениемC. 3D. Что−то другое
System.out.println(Stream.of(-3, -2, -1, 0, 1, 2, 3).max(Math::max).get()
);
![Page 19: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/19.jpg)
![Page 20: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/20.jpg)
Что будет?
A. −3B. −1C. 0D. 1
D. Что−то другое:
System.out.println(Stream.of(-3, -2, -1, 0, 1, 2, 3).max(Math::max).get()
);
![Page 21: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/21.jpg)
![Page 22: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/22.jpg)
• Math.max(−3, −2) = −2 < 0 à −3 < −2, берём −2• Math.max(−2, −1) = −1 < 0 à −2 < −1, берём −1• Math.max(−1, 0) = 0 à −1 == 0, оставляем −1• Math.max(−1, 1) = 1 > 0 à −1 > 1, оставляем −1• Math.max(−1, 2) = 2 > 0 à −1 > 2, оставляем −1• Math.max(−1, 3) = 3 > 0 à −1 > 3, оставляем −1
Stream.of(-3, -2, -1, 0, 1, 2, 3).max(Math::max).get()
![Page 23: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/23.jpg)
Настало время апгрейда
![Page 24: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/24.jpg)
Что произойдёт после выполнения?
A. Мапы поменяются местамиB. Обе станут олдскульнымиC. Обе станут как надоD. Поучитесь программировать! Это вообще не скомпилируется!
Map<String, String> oldSchool = initOldSchool();// oldSchool = {buildTool=maven, lang=java, IOC=jee}Map<String, String> proper = initКакНадо();// proper = {buildTool=gradle, lang=groovy, IOC=spring}
oldSchool.replaceAll(proper::put);
![Page 25: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/25.jpg)
![Page 26: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/26.jpg)
void replaceAll(BiFunction<? super K, ? super V, ? extends V> function)
V put(K key, V value);
Map interface
oldSchool.replaceAll(proper::put);
![Page 27: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/27.jpg)
![Page 28: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/28.jpg)
Одинаково ли сработают три способа?
List<String> list = Arrays.asList("Вронский", "Поезд", "Анна");Comparator<String> cmp = Comparator.nullsLast(Comparator.naturalOrder());
System.out.println(Collections.max(list, cmp));System.out.println(list.stream().collect(Collectors.maxBy(cmp)).get());System.out.println(list.stream().max(cmp).get());
A. Все ответы будут одинаковыеB. Будет два разных ответаC. Будет три разных ответаD. Будет четыре разных ответа
![Page 29: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/29.jpg)
А пазлер в чём?
![Page 30: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/30.jpg)
А теперь?
A. Все ответы будут одинаковыеB. Будет два разных ответаC. Будет три разных ответаD. Будет четыре разных ответа
List<String> list = Arrays.asList("Вронский", null, "Анна");Comparator<String> cmp = Comparator.nullsLast(Comparator.naturalOrder());
System.out.println(Collections.max(list, cmp));System.out.println(list.stream().collect(Collectors.maxBy(cmp)).get());System.out.println(list.stream().max(cmp).get());
![Page 31: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/31.jpg)
Вот теперь убиться
![Page 32: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/32.jpg)
Объяснение тут
• null• NoSuchElementException• NullPointerException
List<String> list = Arrays.asList("Вронский", null, "Анна");Comparator<String> cmp = Comparator.nullsLast(Comparator.naturalOrder());
System.out.println(Collections.max(list, cmp));System.out.println(list.stream().collect(Collectors.maxBy(cmp)).get());System.out.println(list.stream().max(cmp).get());
![Page 33: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/33.jpg)
Мутанты
![Page 34: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/34.jpg)
Как сделать тип, не объявляя его?
interface Кот{ default void мяукать() {System.out.println("мяу");}}interface Пёс{ default void лаять() {System.out.println("гав");}}
public static void main(String[] args) {class Котопёс implements Кот, Пёс {}test(new Котопёс());
}
static void test(Object obj) {def x = (?)obj;x.мяукать();x.лаять();
}
![Page 35: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/35.jpg)
interface Кот{ default void мяукать() {System.out.println("мяу");}}interface Пёс{ default void лаять() {System.out.println("гав");}}
public static void main(String[] args) {class Котопёс implements Кот, Пёс {}test(new Котопёс());
}
Какой вариант сработает?
static void test(Object obj) {// A. Это сработает?
Кот & Пёс x = (Кот & Пёс) obj;x.мяукать();x.лаять();}
static void test(Object obj) {// B. Это сработает?((Consumer<? extends Кот & Пёс>)(x -> {x.мяукать();x.лаять();
})).accept((Кот & Пёс)obj); }
static void test(Object obj) {// C. Это сработает?Optional.of((Кот & Пёс) obj)
.ifPresent(x -> {x.мяукать();x.лаять();
});}
// D. Да вы упоролись, в моей Джаве такого не бывает!
![Page 36: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/36.jpg)
![Page 37: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/37.jpg)
А как это вообще работает???
![Page 38: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/38.jpg)
static void test(Object obj) {// C. Это сработает?Optional.of((Кот & Пёс) obj)
.ifPresent(x -> {x.мяукать();x.лаять();
});}
![Page 39: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/39.jpg)
![Page 40: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/40.jpg)
Трудности перевода
![Page 41: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/41.jpg)
Что выведет?
A. ПРИВЕТ/ПРИВЕТB. ПРИВЕТ/HELLOC. HELLO/ПРИВЕТD. HELLO/HELLO
public class Test {String str;
void run() {str = "привет";Supplier<String> s1 = str::toUpperCase;Supplier<String> s2 = () -> str.toUpperCase();str = "hello";System.out.println(s1.get());System.out.println(s2.get());
}}
![Page 42: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/42.jpg)
![Page 43: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/43.jpg)
public class Test {String str;
void run() {str = "привет";Supplier<String> s1 = str::toUpperCase;Supplier<String> s2 = () -> str.toUpperCase();str = "hello";System.out.println(s1.get());System.out.println(s2.get());
}}
![Page 44: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/44.jpg)
![Page 45: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/45.jpg)
Что произойдёт?
A. ConcurrentModificationExceptionB. ArrayIndexOutOfBoundsExceptionC. NullPointerExceptionD. Успешно завершится
List<String> list = new ArrayList<>(Arrays.asList("Arne", "Chuck", "Slay"));list.stream().forEach(x -> {
if(x.equals("Chuck")) {list.remove(x);
}});
![Page 46: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/46.jpg)
![Page 47: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/47.jpg)
Java 8 vs Chuck Norris
![Page 48: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/48.jpg)
Ад вот почему:
• stream().forEach() à spliterator().forEachRemaining()• forEachRemaining проверяет modcount один раз в конце• Удаление элемента приведёт к сдвигу массива с добавлением null в конце:
[“Arne”, “Chuck”, “Slay”] à [“Arne”, “Slay”, null]• На последней итерации if(null.equals(“Chuck”)) упадёт с NPE (до CME не дожили)
• Используйте list.removeIf(“Chuck”::equals);
![Page 49: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/49.jpg)
![Page 50: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/50.jpg)
Выводы
![Page 51: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/51.jpg)
1. Пишите читабельный код2. Комментируйте все трюки3. Иногда это баг4. Пользуйте static code analysis - intellij
IDEA!5. Rtfm6. Хм, а groovy не так уж и плох!
![Page 52: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/52.jpg)
Паззлеров, конечно, полно.
Наткнулись на паззлер? Давайте его сюда!
![Page 53: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/53.jpg)
Понравилось?Хвалите нас в твиттере скорее!
- java8puzzlers jpoint- Tagir valeev- jekaborisov- jbaruch
Не понравилось?/dev/null
![Page 54: java 8 puzzlers - public.jugru.orgpublic.jugru.org/jpoint/2016/msk/day_2/track_1/java_8_puzzlers.pdfВ чём разница между строчками 1 и 2? A. 1 компилируется,](https://reader035.vdocuments.site/reader035/viewer/2022062415/5fe0a999c73f530eb917dc06/html5/thumbnails/54.jpg)