Size: a a a

Kotlin Community

2020 January 24

PB

Pavel Bayburtyan in Kotlin Community
Всем привет. Хочется как-нибудь красиво в функциональном стиле есть решить следующую задачку:
Есть List<A> и некий id из вне. У объекта A есть поля id (юник) и foo. Требуется замаппить его в List<B>. При этом маппить нужно лишь те объекты, у которых A.foo != null. Кроме того, мне нужно найти индекс объекта в B в обновленном листе ориджин которого объект A для, которого выполнялось бы условие A.id == id.
Фух, надеюсь, понятно расписал 😄
То есть группо говоря в листе List<A> этот объект с id имел бы индекс скажем 27, но так как в List<B> маппятся не все объекты A, то соответствующий ему объект B имеет другой индекс в  List<B>.
Заранее благодарен за советы
источник

AN

Alexander Nozik in Kotlin Community
Alexander Nozik
Посмотрел. Пример действительно ломающий. Сейчас допишу в кип
источник

AN

Alexander Nozik in Kotlin Community
Pavel Bayburtyan
Всем привет. Хочется как-нибудь красиво в функциональном стиле есть решить следующую задачку:
Есть List<A> и некий id из вне. У объекта A есть поля id (юник) и foo. Требуется замаппить его в List<B>. При этом маппить нужно лишь те объекты, у которых A.foo != null. Кроме того, мне нужно найти индекс объекта в B в обновленном листе ориджин которого объект A для, которого выполнялось бы условие A.id == id.
Фух, надеюсь, понятно расписал 😄
То есть группо говоря в листе List<A> этот объект с id имел бы индекс скажем 27, но так как в List<B> маппятся не все объекты A, то соответствующий ему объект B имеет другой индекс в  List<B>.
Заранее благодарен за советы
list.filter{it.foo != null}.find{it.id == id}
источник

AN

Alexander Nozik in Kotlin Community
Если листы большие, то лучше даже на сиквенсах
источник

AN

Alexander Nozik in Kotlin Community
а, стоп, индекс же надо. Момент.
источник

PB

Pavel Bayburtyan in Kotlin Community
Alexander Nozik
а, стоп, индекс же надо. Момент.
кроме того у B нету уже поля id, то есть манипуляцию с проверкой id надо проводить до маппинг
источник

AN

Alexander Nozik in Kotlin Community
list.filter{it.foo != null}.indexOfFirst{it.id == id}
источник

AN

Alexander Nozik in Kotlin Community
Если надо еще трансформацию, то между фильтром и индексом надо еще map воткнуть. Тогда тем более сиквенсы
источник

AN

Alexander Nozik in Kotlin Community
list.asSequence().filter{it.foo != null}.map(::toB).indexOfFirst{it.id == id}
источник

PB

Pavel Bayburtyan in Kotlin Community
Alexander Nozik
list.asSequence().filter{it.foo != null}.map(::toB).indexOfFirst{it.id == id}
спасибо, это все хорошо, но после map у меня уже нет доступа к полю id. Как вариант завпрэпить в промежуточный объект, но не знаю, насколько это стоит того. Пока я сделал это просто в лоб (в маппинг функции вычисляю индекс)
источник

AM

Andrew Mikhaylov in Kotlin Community
Не вижу проблем протянуть, раз уж нужно, индекс
.map { it.id to it.toB() }
.indexOfFirst { (id, b) ->
источник

PB

Pavel Bayburtyan in Kotlin Community
Спасибо
источник

OY

Oleg Yukhnevich in Kotlin Community
👍
источник

AM

Andrew Mikhaylov in Kotlin Community
Таки да, починил свой продолб с публикацией, а после выяснил, что такая же фигня происходит, и флажок её действительно лечит. :)
источник

OY

Oleg Yukhnevich in Kotlin Community
Andrew Mikhaylov
Таки да, починил свой продолб с публикацией, а после выяснил, что такая же фигня происходит, и флажок её действительно лечит. :)
Хах
А я так долго тогда думал, что я где-то косякнул
Сорсы градл публикации перерыл....
источник
2020 January 25

VD

Victor Demihov in Kotlin Community
В исходниках класс Array<T> смотрю конструктор единственный:
    public inline constructor(size: Int, init: (Int) -> T)

Все скобки круглый.

Почему тогда создание объекта именно так?
    var ar = Array<Int>(5, {3});

Цифра 3 в фигурных. Ведь в конструкторе фигурных скобок нет.. Я что-то не понял.
источник

BV

Boris Vanin in Kotlin Community
Victor Demihov
В исходниках класс Array<T> смотрю конструктор единственный:
    public inline constructor(size: Int, init: (Int) -> T)

Все скобки круглый.

Почему тогда создание объекта именно так?
    var ar = Array<Int>(5, {3});

Цифра 3 в фигурных. Ведь в конструкторе фигурных скобок нет.. Я что-то не понял.
источник

AE

Alexandr Emelyanov in Kotlin Community
Alexey Tkachenko
А нельзя ли придумать нестираемые дженерики?
Нет
источник

AE

Alexandr Emelyanov in Kotlin Community
Bogdan Panchenko
Да, он хранить Фулл инфу
Для листа?)
источник

BP

Bogdan Panchenko in Kotlin Community
Alexandr Emelyanov
Для листа?)
для всего) это что-то типа из джексона
источник