
Евгений
03.09.2018
17:58:16
какой нить unmodifiable?
я ковыряю легаси код Ланита

Ivan
03.09.2018
17:58:33
Это, конечно, плохой ответ, но длинный вариант явно определяет реализацию. А toList нужно знать изнутри. Никто, скорее всего, не будет менять внутри toList реализацию, но мало ли ?

Nikolay
03.09.2018
17:58:55

Google

Nikolay
03.09.2018
17:59:07
а если модицифируем, то надо в ArrayList

Ivan
03.09.2018
17:59:31
Ну модификация результата немного не про streams
Сначала стримами фильтруем и мапим, а потом результат через итератор модифицируем?)

Евгений
03.09.2018
18:00:13
то есть стрим все таки возвращает немодифицируемый лист?

Ivan
03.09.2018
18:00:54
можно глянуть сорцы

Nikolay
03.09.2018
18:01:12

Mikhail
03.09.2018
18:01:16

Nikolay
03.09.2018
18:01:22

Ivan
03.09.2018
18:01:34

Nikolay
03.09.2018
18:02:04

Ivan
03.09.2018
18:02:20

Nikolay
03.09.2018
18:02:33
почему нет?

Google

Ivan
03.09.2018
18:02:48
так это уже будет новый list

Nikolay
03.09.2018
18:03:04
ээээ... шта?!
add или addAll порождают новый лист?
или таки вызываются на имеющемся?

Ivan
03.09.2018
18:04:02
public boolean addAll(Collection<? extends E> c) {
Object[] a = c.toArray();
int numNew = a.length;
ensureCapacityInternal(size + numNew); // Increments modCount
System.arraycopy(a, 0, elementData, size, numNew);
size += numNew;
return numNew != 0;
}
https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#arraycopy-java.lang.Object-int-java.lang.Object-int-int-
под arraylist лежит массив объектов, а они не умеют динамически менять размер. Когда ты создаешь массив, он получает DEFAULT_CAPACITY, либо тот, который ты указываешь. Добавляя элементы сверх этой нормы массив под низом нужно пересоздать, копируя в него все из предыдущего.

Nikolay
03.09.2018
18:09:42
молодец
you can read! как говорится

Ivan
03.09.2018
18:10:05

Nikolay
03.09.2018
18:10:15
только мысль была в том что если toList вернёт unmodifiable, то хрен ты на нём вызовешь addAll
и если тебе надо гарантировать тип объекта, чтобы не развалить кусок дальнейшей логики, toCollection (AL:new) вполне ок

Ivan
03.09.2018
18:11:19
public static <T>
Collector<T, ?, List<T>> toList() {
return new CollectorImpl<>((Supplier<List<T>>) ArrayList::new, List::add,
(left, right) -> { left.addAll(right); return left; },
CH_ID);
}

Nikolay
03.09.2018
18:11:42
а мемкопи в современном мире настолько грошовое, что говорить про его стоимость как-то даже... стыдно

Ivan
03.09.2018
18:11:49

Nikolay
03.09.2018
18:11:53
я вообще не спорю. я сказал зачем может понадобиться эррейлист - "долить данных"
дальше пошла какая-то мура про "выделение памяти"

Ivan
03.09.2018
18:12:46
Специально для тебя
* Returns a {@code Collector} that accumulates the input elements into a
* new {@code List}. There are no guarantees on the type, mutability,
* serializability, or thread-safety of the {@code List} returned; if more
* control over the returned {@code List} is required, use {@link #toCollection(Supplier)}.

Google

Ivan
03.09.2018
18:13:11
Все, я кончил

Nikolay
03.09.2018
18:13:14
угу. поэтому та странная конструкция имеет право на жизнь. ну, как бы

Евгений
03.09.2018
18:16:46

Таир
03.09.2018
18:28:02

Евгений
03.09.2018
18:29:17
ну вообще то да)
но речь не о джаве, а о коде

Alex
03.09.2018
18:29:25
++

Диоген
03.09.2018
18:31:14
у меня вот тут проекту 2 месяца, он уже легаси..

Tolegen
03.09.2018
18:32:09

Таир
03.09.2018
18:36:01

Таир
03.09.2018
18:37:21
Хотя, если вдуматься в значение слова — все что угодно может быть легаси
Все что написано человеком, который уже уволился — легаси ))
Даже если он вчера написал и сегодня уволился и переложил на тебя свой говнокод ))

Tolegen
03.09.2018
18:41:17

Nikolay
03.09.2018
18:46:37
всё, что страшно рефакторить - легаси
вдруг человек хорошо писал и ушёл так, что ему даже в спину не плюнули..

Таир
03.09.2018
18:51:06

Google

Таир
03.09.2018
18:52:46
Другими словами легаси — это унаследованный техдолг

Nikolay
03.09.2018
18:53:00
да
но
как сказал один лысый - весь мир основан на долгах
главное вовремя закрывать наиболее дорогие

Shumilin
03.09.2018
19:13:33
Всем доброго! Ребята а можете подсказать, кто какие паттерны использует или просто считает обязательными для частого применения. 3-4 штуки?

Alexander
03.09.2018
19:27:50
стратегия конечно

Admin
ERROR: S client not available

Alexander
03.09.2018
19:27:53
потом конечно же мост
затем синглетон
затем фактори
а там еще может подтянутся фасад
за которым скрывается прокси и флайвейт
ну конечно это все должно быть в адаптере
который обвещан тремя декораторами
и создается как прототип
с отложеной инициализацией
и в фабричном методе хранителя

Shumilin
03.09.2018
19:31:23
нарвался на ответ называется ?

Alexander
03.09.2018
19:31:46
ну а чо

Google

Alexander
03.09.2018
19:31:47
как говорится
Roses are red, leaves are green, but only Java has AbstractSingletonProxyFactoryBean
ты лучше расскажи зачем тебе это понадобилось то в 2018 году

Shumilin
03.09.2018
20:02:02
а что в 2018 паттерны не нужны?
пообщался с человеком, хвалят толковой мол он, спросил пока была минутка, часто юзаешь? он - каждый день
вот стало интересно спросить тут мнение, в java сообществе

Диоген
03.09.2018
20:11:15
Каждый выебщик считает обязательным именно то, в чём он сам хорошо разбирается
Не обращай внимание

Nikolay
03.09.2018
20:15:13
примерно 99% паттернов, которые ты используешь постоянно, ты не выделяешь как паттерны. ты их просто юзаешь. вообще вопрос про паттерны выглядит как отсылка к собеседованиям.
ну создал ты коллекцию с кастомным компаратором
ты же не проговариваешь в голове "а вот тут я использовал паттерн СТРАТЕГИЯ"
(надеюсь)

Vitalii
03.09.2018
20:17:15
Да и слова фасад и декоратор в повседневной разработке используются.

Shumilin
03.09.2018
20:20:43
и если их не знаешь выучить стоит что бы вот автоматом создавать коллекцию с кастомным компаратором и понимать что так ок) ибо стратегия))
наверное....

Vitalii
03.09.2018
20:21:55
Ну вот относительно недавно меня даж один парень спрашивал, мол, правильно ли он понимает паттерн Стратегия.
Выяснилось, что его неправильно понимаю я))0)
В общим, такие разговоры — норм, если в тему, ящетаю.