Kotlin - фильтрация списка объектов путем сравнения со списком свойств - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть класс Person:

class Person(var fullName: String, var nickname: String, var age: Int)

В моем коде в какой-то момент у меня есть объекты List of Person и список псевдонимов.

var people: List<Person> = listOf(
  Person("Adam Asshat", "dontinviteme", 21),
  Person("Bob Bowyer", "bob", 37),
  Person("Emily Eden", "emily", 22)
)

var invitedToParty: List<String> = listOf("bob", "emily")

Теперь яЯ хочу получить список только с Бобом и Эмили, используя лямбду, но я не уверен, как бы я поступил в Котлине.

var invitedPeople: List<Person> = // a lambda that results in a list containing only Bob and Emily's objects

В C # я бы, вероятно, использовал LINQ и a.где () - метод, объединенный с == any (), но Kotlin, похоже, не имеет ничего подобного из того, что я нашел.

Возможно ли это даже в лямбдах Kotlin?

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

В C # вы должны сделать:

people.Where(p => invitedToParty.Any(s => s == p.nickname));

Аналогично в Kotlin вы будете использовать filter, что похоже на Where, а any говорит само за себя:

people.filter { p -> invitedToParty.any { it == p.nickname } }

или используя contains:

people.filter { invitedToParty.contains(it.nickname) }
0 голосов
/ 28 декабря 2018

Вы можете сделать это:

val invitedPeople: List<Person> = people.filter { invitedToParty.contains(it.nickname) }
0 голосов
/ 28 декабря 2018

Вы можете использовать функцию .filter() для этого:

val invitedPeople: List<Person> = people.filter { it.nickname == "bob" || it.nickname == "emily" }

Или вы можете сделать это на основе набора:

val invitedPeople: List<Person> = people.filter { it.nickname in setOf("bob", "emily") }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...