В Groovy есть способ собрать все объекты в списке, для которых переменная-член соответствует значению в другом списке? - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть список объектов, скажем List<Family> семейств.

У меня есть еще один список строк с именами FamilyNames, скажем List<String> имен.

Я хочу самый оптимальный способ получитьСписок всех семей, для которых FamilyNames совпадает с именами.

Например: скажем, у меня есть 5 семейств.С 1 по 5. с именами Fam1, Fam2 .... Fam5 и names = ["Fam1", "Fam2"]

Как я могу получить обратно список семей, содержащий Fam1 и Fam2?

Что если я хочу сопоставить2 параметра вместо 1.

Я пытаюсь выяснить, есть ли способ сделать это, не просматривая весь список и не вызывая API Groovy?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018
class Family {
    String name
}

List<Family> families = []
families << new Family(name: 'Fam1')
families << new Family(name: 'Fam2')
families << new Family(name: 'Fam4')
families << new Family(name: 'Fam5')

List names = ['Fam1', 'Fam2', 'Fam3']`enter code here`

families.findAll { it -> it.name in names}
0 голосов
/ 25 сентября 2018

Я хочу наиболее оптимальный способ получить список всех семей, для которых FamilyNames совпадает с именами.

Трудно сказать, что является оптимальным, потому что вы могли бы оптимизировать дляразные вещи (быстрая среда выполнения, наименьшая память, наименьший код, большинство идиоматических и т. д.)

Вы не указали, какой JDK вы используете, поэтому неясно, открыты ли вы для использования потоков илинет.

Один очень простой подход Groovy:

class Family {
    String name
}

List<Family> families = []
families << new Family(name: 'Fam1')
families << new Family(name: 'Fam2')
families << new Family(name: 'Fam4')
families << new Family(name: 'Fam5')

List names = ['Fam1', 'Fam2', 'Fam3']

List results = names.findAll { name ->
    families.find { family ->
        family.name == name
    }
}

// results will be  [Fam1, Fam2]

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...