Java 8 Список списка - PullRequest
       13

Java 8 Список списка

0 голосов
/ 24 мая 2019

У меня есть один вопрос относительно API потока Java8.У меня есть один класс, как показано ниже

class MyDetails(
    val fname:String,
    val lname:String,
    val myAccountList:List<Myaccount>
)

class Myaccount(
    val accID:String,
    val accType:String,
    val associateList:List<Associate>
)

class Associate(
    val associateID:String,
    val role:String
)

Теперь я хочу получить

Список Myaccount

, роль которого " владелец"(Предположим).

Для этого я написал ниже код, но он не работает

myDetailsObject?.myAccountList?.stream()?.filter { account ->
            account?.associateList?.stream()?.allMatch{associate ->
                println("Value of Role ${associate.role}")
                "owner".equals(associate.role)}!!
        }?.collect(Collectors.toList())?.toList()

Вывод для оператора Print -

Value of Role owner
Value of Role view
Value of Role read
Value of Role owner
Value of Role write
Value of Role write
Value of Role view

Если владелец доступен в списке, почему я получаю список нулевого размера?Но приведенный выше код не работает для меня .. Любое предложение будет оценено.Хотя синтаксис кода в Kotlin, но Java-код также будет полезен.

Ответы [ 3 ]

3 голосов
/ 24 мая 2019

Почему бы просто не использовать kotlin для работы?

fun wanted(candidates: List<Myaccount>) =
    candidates.filter { it.associateList.any { it.role == "wanted" } }
1 голос
/ 24 мая 2019

Запрашивая «allMatch», вы ожидаете, что у всех элементов будет «владелец». используйте anyMatch() вместо?

myDetailsObject?.myAccountList?.stream()?.filter { account ->
            account?.associateList?.stream()?.anyMatch{associate ->
                println("Value of Role ${associate.role}")
                "owner".equals(associate.role)}!!
        }?.collect(Collectors.toList())?.toList()
0 голосов
/ 24 мая 2019

Java-код для фильтрации объектов учетных записей, у которых все партнеры являются владельцами и собираются в виде списка, составляет

myAccountList.stream()
    .filter(account -> account.associateList.stream()
               .allMatch(associate -> "owner".equals(associate.role))
     .collect(Collectors.toList())

РЕДАКТИРОВАТЬ: (на основе обновления OP)

Если вы хотите выбрать учетную запись, если хотя бы одна из сотрудников ассоциирована с владельцем, вам нужно использовать anyMatch вместо allMatch

...