Поиск по ключевым словам в объектах - PullRequest
0 голосов
/ 20 января 2019

У меня есть список объектов, каждый из которых имеет имя и фамилию.Я пытаюсь создать функцию поиска по ключевым словам для обоих их имен, поэтому моя логика заключается в том, что если я объединю их имена и фамилии, а затем проверим, содержит ли сумма обоих имен ключевое слово, вернем объект в виде строки.Я пытаюсь написать это как лямбда-выражение, но просто не понимаю.Функция ничего не возвращает каждый раз.Я совершенно новичок в лямбдах, так что эта простая задача довольно сложна для меня.Когда я читаю мой код ниже ... я вижу это: каждый элемент объединяет свои имена, затем фильтрует, проверяя, содержит ли строка ключевое слово, затем преобразует поток в список объектов, затем преобразует объекты в строку, а затем возвращает строку.Спасибо всем, кто может помочь.

public String generateUserByKeyword2(String keyword){
 return  users.stream()
         .map(x-> x.getFirstName() + x.getLastName().toLowerCase())
         .filter(x -> x.contains(keyword.toLowerCase()))
         .collect(Collectors.toList())
         .toString();
}  

1 Ответ

0 голосов
/ 20 января 2019

Если вы выполняете поиск по имени, он не в нижнем регистре, правильная строка должна быть:

     .map(x-> (x.getFirstName() + x.getLastName()).toLowerCase())

(обратите внимание на дополнительные скобки, или вы можете добиться того же, позвонив toLowerCase() на оба)

В любом случае, результат будет возвращать искаженные составные имена. Если вы хотите вернуть список оригинальных объектов, вам нужно объединить map лямбда и filter лямбда вместе:

     .filter(x-> (x.getFirstName() + x.getLastName()).toLowerCase().contains(keyword.toLowerCase())
     .collect(Collectors.toList())

Кроме того, вы можете немного оптимизировать, вызывая toLowerCase() только один раз.

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