Size: a a a

2020 October 26

T

Tagir in learn.java
Но, конечно, тетрис - это не то что с гордостью можно предъявить на собеседовании. Лучше в опенсорс контрибутить
источник

B

Bromles in learn.java
Tagir
Мне иногда кажется, что люди сильно много уделяют внимания каким-то высокоуровневым штукам вроде "надо изучить спринг и гибернейт", хотя в программах на самом деле работают простые ифы и циклы. А когда доходит до ифов и циклов, то не всякий продвинутый знаток спринга сходу нафигачит нормальный алгоритм. Поэтому тренировать важно не только перекладывание из базы в сокет, а именно умение запрограммировать логику
Тут недавно несколько человек говорили, что циклы разве что от безысходности и надо все на стрим апи пилить
источник

T

Tagir in learn.java
Хм. Мой опыт говорит, что это не так. Многие циклы на стримы вообще не перепишешь. В других случаях цикл выглядит не хуже стрима. Важно знать оба инструмента и уметь их применять к месту
источник

M

Mr.Temirlan in learn.java
Rus
как думаете написать тетрис для портфолио нормальная тема?
я писал 2048 с кнопкой автохода, в общем больше 4096 мой алгоритм не набирал
источник

T

Tagir in learn.java
Цикл - более низкоуровневая, но более универсальная штука
источник

R

Rus in learn.java
Tagir
Но, конечно, тетрис - это не то что с гордостью можно предъявить на собеседовании. Лучше в опенсорс контрибутить
так то я на многое пока и не претендую но такими мелкими шажками можно и до луны дотянуться :)
источник

B

Bromles in learn.java
Tagir
Хм. Мой опыт говорит, что это не так. Многие циклы на стримы вообще не перепишешь. В других случаях цикл выглядит не хуже стрима. Важно знать оба инструмента и уметь их применять к месту
Я как раз сегодня ночью тривиальный цикл переписывал на стрим. Получилось рабоче, но ужасно
источник

B

Bromles in learn.java
Bromles
Код на циклах

for(int i = 0; i < 3; i++)
{

for(int j = 0; j < 3; j++)
{
System.out.print(array[i][j] + " ");
}

System.out.println();
}

System.out.println("-------------");


Код на стримах

Arrays.stream(array).map(a -> Arrays.stream(a).mapToObj(String::valueOf).collect(Collectors.joining(" "))).peek(System.out::println).skip(2).map(x -> x = "-------------").forEach(System.out::println);

Поправьте меня, если на стримах можно сделать оптимальнее. Но пока что идея "вообще циклы не использовать, стримы читаемее" выглядит так себе
вот
источник

E

Em. in learn.java
Кто может объяснить подробнее о ConcurrentModificationException? Что-то из книги понимание о нём очень очень туго заходит.
источник

T

Tagir in learn.java
1. Нельзя менять непотокобезопасную коллекцию  и одновременно читать её (итератором, стримом, через compute* и т. д.) Просто нельзя. Результат непредсказуемый
2. Джава пытается вам помочь и иногда может определить, что вы всё-таки это делаете. В этих случаях вы словите ConcurrentModificationException. Если вы его словили, то значит в программе баг
источник

T

Tagir in learn.java
Конечно, если вы его не словили, это не значит, что бага нет. Джава не всемогущая и не может за всем уследить
источник

E

Em. in learn.java
И получается чтобы обезопаситься лучше использовать Concurrent-классы? (Например, ConcurrentHashMap)
источник

T

Tagir in learn.java
Нет. Лучше не менять коллекции в процессе чтения/обхода
источник

E

Em. in learn.java
В вспомогательные классы просто согласовывают эти "неверные" действия получается?)
источник

T

Tagir in learn.java
Даже с ConcurrentHashMap гарантии непонятные. Вот обходишь ты мэпку итератором и в это время вставляешь в неё новые элементы или удаляешь старые
источник

T

Tagir in learn.java
Исключения не вылетит, но тебе никто не гарантирует, увидишь ты свежевставленное во время обхода или нет
источник

T

Tagir in learn.java
Em.
В вспомогательные классы просто согласовывают эти "неверные" действия получается?)
Не понял. Какие вспомогательные классы?
источник

E

Em. in learn.java
Ну с приставкой Concurrent)
Как например выше с хеш мапой)
источник

T

Tagir in learn.java
Ну в случае с конкаррент эти действия перестают быть неверными. Они специально сделаны для такого. В первую очередь для одновременного обновления из множества потоков. Но это не значит, что с ними проще работать. Может оказаться, что сложнее
источник

T

Tagir in learn.java
Есть концептуально простые коллекции - например, CopyOnWriteArrayList
источник