Фильтрация данных из коллекции с определенной строкой

Я хотел бы получать только данные, которые не содержат определенных строк.

У меня есть этот код:

@GET @Path("getParticipants") @Produces(MediaType.APPLICATION_JSON) fun getParticipants(): Map<String, List<String>> { val (nodeInfo, nodeUpdates) = rpcOps.networkMapFeed() nodeUpdates.notUsed() return mapOf("getParticipants" to nodeInfo .map { it.legalIdentities.first().toString() } .filter { it != myLegalName && it !in NOTARY_NAMES }) } 

Выполняя этот код выше, я получаю следующее:

 0 "C=GB,L=London,O=UserA" 1 "C=GB,L=London,O=Controller" 2 "C=US,L=New York,O=UserB" 
  • myLegalName = "UserA"
  • NOTARY_NAMES = «Контроллер»

То, что я хотел бы достичь, заключается в том, что getParticipants извлекает мне только строки, которые НЕ СОДЕРЖИВАЮТ UserA («myLegalName») и НЕ СОДЕРЖИВАЮТ контроллер («NOTARY_NAMES»), поэтому в этом случае только «C = US, L = New York , O = UserB».

Основываясь на вашем заявленном выходе, ваш предикат после подстановки значений результата выглядит так …

 "C=GB,L=London,O=UserA" != "UserA" && "C=GB,L=London,O=UserA" !in "Controller" // or, after using information from your comments "C=GB,L=London,O=UserA" != "UserA" && "C=GB,L=London,O=UserA" !in listOf("Controller","NetworkSErvice") 

… и, конечно же, не отфильтровывает то, что вы хотите.

Если какое-либо другое поле, кроме legalIdentities.first() содержит нужную вам информацию, затем отфильтруйте это (и фильтр вызовов перед картой) …

 .filter { it.someOtherField() != myLegalName && it.someOtherField() !in NOTARY_NAMES } //then... .map { it.legalIdentities.first().toString() } 

В противном случае .legalIdentities.first() parse .legalIdentities.first() чтобы получить элемент «O» строки и фильтр.