
Boris
12.04.2018
18:55:21
подумал, что нет смысла в фолде:
fun <T> List<T>.removeItAndNext(item: T): List<T> {
var idxRemove = -1
return filterIndexed { index, it ->
when (item) {
it -> {
idxRemove = index
false
}
else -> !(index > -1 && index == idxRemove)
}
}
}

Жабра
12.04.2018
18:55:46

Руслан
12.04.2018
18:55:57

Google

Руслан
12.04.2018
18:56:34
вопросы по условию к автору задачи :)

Жабра
12.04.2018
18:56:37

Boris
12.04.2018
18:56:40

Жабра
12.04.2018
18:57:18
А почему удаляем, передавая элемент, а не индекс элемента? Есть, у меня, к примеру, последовательность 0, 1, 2, 3, 2, 4. Я хочу удалить последние два элемента.
Кидаю 2 - удалятся 2 и 3, хотя я хочу 2 и 4.

Boris
12.04.2018
19:01:34

Bogdan
12.04.2018
19:01:38

Жабра
12.04.2018
19:02:23
val oldList = listOf(0, 1, 2, 3, 4, 5)
val list = oldList.toMutableList()
if (list.size > index) list.removeAt(index)
if (list.size > index) list.removeAt(index)

Quantum Harmonizer
12.04.2018
19:02:27
val idx = list.indexOf(item)
return list.subList(0, idx) + list.subList(idx + 2, list.size)

Bogdan
12.04.2018
19:02:44

Boris
12.04.2018
19:02:50

Жабра
12.04.2018
19:02:51

Boris
12.04.2018
19:03:14

Quantum Harmonizer
12.04.2018
19:03:40

Google

Boris
12.04.2018
19:04:07
очень простая задача, а вот такого вот решения простого, да еще чтобы в один проход чот не видно

Quantum Harmonizer
12.04.2018
19:05:17
Все же вроде в один проход, не?

Boris
12.04.2018
19:06:09
только те что через фолд и последняя реализация через фильтрИндексед, остальные вроде нет

Жабра
12.04.2018
19:06:25

Quantum Harmonizer
12.04.2018
19:06:28
а, removeAt два раза скопирует хвост

Bogdan
12.04.2018
19:08:24
а может заюзать линкед? фигня конечно, но можно найти элемент и есть доступ к следущему

Quantum Harmonizer
12.04.2018
19:08:37
линкедлисты не нужны

Bogdan
12.04.2018
19:09:18
зачем? О_о
находим елемент, берем предудущий, и в next вставляем сразу елемент из item.next.next, один проход, кода не много, но он че очень красивый

Quantum Harmonizer
12.04.2018
19:11:53

Bogdan
12.04.2018
19:12:21

Руслан
12.04.2018
19:13:09

Bogdan
12.04.2018
19:13:10

Quantum Harmonizer
12.04.2018
19:13:21

Boris
12.04.2018
19:13:54
а мы хотели в один обход вроде

Quantum Harmonizer
12.04.2018
19:14:11

Google

Bogdan
12.04.2018
19:14:14

Boris
12.04.2018
19:14:25
ну, в линкед лист запихать элементы

Bogdan
12.04.2018
19:14:33

Boris
12.04.2018
19:15:55

Bogdan
12.04.2018
19:16:05
и изменить
все

Boris
12.04.2018
19:16:19

Жабра
12.04.2018
19:16:30
:)

Bogdan
12.04.2018
19:16:41
ззадача сама по себе нек сложна, но решить красивым кодом, мне кажется почти нереально, апи не подходящий

Boris
12.04.2018
19:20:28
ну вот да, о том и речь

Жабра
12.04.2018
19:25:30

Boris
12.04.2018
19:36:22

Жабра
12.04.2018
19:37:15

Boris
12.04.2018
19:37:50
потому что они менее подвержена ошибкам неверных индексов

Michael
12.04.2018
20:26:18
fun removeCurrentNext(l: List<Int>, v: Int): List<Int> {
val s = l.size - 1
return l.filterIndexed({i, x -> !(l[i] ==v || (i<s && i>0 && l[i-1] == v))})
}

Quantum Harmonizer
12.04.2018
20:28:28
Выглядит как скала)

Michael
12.04.2018
20:28:51
простите, я только учусь

Google

Bogdan
12.04.2018
20:57:17
@Harmonizr презентация прекольная, думаю и сам доклад был неплохой

Sergey
12.04.2018
20:59:27
не успел)

Anton
12.04.2018
20:59:33
)

Boris
12.04.2018
21:34:35
А как названия функция которая делает зип с соседом?

DY
12.04.2018
21:45:02
zipWithNext?

Maxim
12.04.2018
21:47:30
А в котлине ассемблерные вставки делать можно?

Даниил
12.04.2018
21:49:34
я надеюсь ты про котлин нейтив

Maxim
12.04.2018
21:51:01
Я просто уснуть не могу, решил подумать над чем то глупым. Ищу единомышленников)

Даниил
12.04.2018
21:51:25
не ну просто если ты про котлин который под jvm то конечно нельзя
а на счёт котлин нейтив не знаю, вряд ли, во всяком случае ничего такого не гуглится

Boris
12.04.2018
21:52:45

Konstantine
12.04.2018
22:20:07


Alexander
12.04.2018
22:46:33
Чем не ок только никто объяснить не может. :)
Конкретно моё мнение:
1. Впринципе if-else может делать тоже самое.
2. Тернарный оператор очень располагает к нечитаемому использованию:
a ? b : c это обычно смотрится хорошо, наверное даже лучше, чем if (a) b else c
a ? (b ? c : d) : e или какая-либо другая вложенность смотрится мягко говоря сложно.
С помощью if-выражений можно расписать намного читабельнее.
Итого - есть один простой кейс, в котором иногда тернарный оператор смотрится чуть-чуть лучше чем if-else (отмечу, что if-else смотрится неплохо при if-else выражениях, а не присваиваниях как в джаве). И есть куча кейсов, когда лучше не использовать тернарный оператор. И ради одного действительно небольшого улучшения нужно ли вводить целый оператор?

Konstantine
12.04.2018
22:47:46
Не хотят - пусть не добавляют, дело их. Просто забавно, что такой банальный кейс обошли стороной.


Alexander
12.04.2018
22:51:03

Konstantine
12.04.2018
22:51:57

Alexander
12.04.2018
22:53:03
Метадебат - разве такие чаты не нужны только для ведения таких дебатов и редких новостей/вопросов по языку? :)

Boris
13.04.2018
05:31:13

Mikhail
13.04.2018
06:05:20
Чем не ок только никто объяснить не может. :)
Java: if/else != ? :, потому что if/else не выражение.
Kotlin: if/else == ? :, потому что if/else - выражение.
Тем, кто жаждет тернарного оператора советую подумать, вдруг вам еще хочется альтернативный синтаксис для определения классов типа ©ClassName, или лямбды писать типа λx,y -> ... Можно еще для случаев когда нам нужно матчить просто инты ввести switch/case.

Google

Roman Q
13.04.2018
06:13:03
Таких сразу банить нужно

Anton
13.04.2018
06:13:53
Всем привет, есть такая идея - передавать метод в который должен передаваться результат (в java я бы просто написал интерфейс )
public interface OnSuccessListener<T> {
void onSuccess(T item);
}
но в Котлине я так понимаю это не прокатит, я попробовал следующие
но это мне не помогло, как вообще правильно в таких ситуациях поступать на котлине?
не хочется наследовать массу Observable от базового ради того чтобы в них просто переопределять onSuccess для дергания нужного метода

Mikhail
13.04.2018
06:31:18

Anton
13.04.2018
06:36:41
спасибо, вроде понял, сейчас опробую
Да, все отлично, оказалось то что я написал работает, просто передавал неправильно
и еще такой момент, получается не важно как записывать так val viewFun: T.() -> Unit или val viewFun: (T) -> Unit ??

Mi
13.04.2018
06:41:53

Anton
13.04.2018
06:43:20
в самой передаче да, а в приеме не важно?

Жабра
13.04.2018
06:43:40

Anton
13.04.2018
06:44:13
т.е. в моем случае все таки надо (T) , просто удивился, что отрабатывают одинаково