Сравните список объектов с ключом карты и замените значение значения списка значением карты

#java

#java

Вопрос:

Это класс, который имеет детали,

 public class TestMap {


public static void main(String[] args) {
    // TODO Auto-generated method stub
    

    List<PersonData>  personDataLst = new ArrayList<PersonData>();
    
    Person person = new Person();
    Person person00 = new Person();
    
    person.setFirstName("AASH");
    person.setLastName("17072017");
    person00.setFirstName("LAKSH");
    person00.setLastName("11222020");
    
    PersonData personData = new PersonData();
    PersonData personData01 = new PersonData();
    personData01.setPerson(person00);
    personData.setPerson(person);
    personDataLst.add(personData01);
    personDataLst.add(personData);
    
    PersonResponse response = new PersonResponse();
    
    response.setPersonDatas(personDataLst);
    
    System.out.println(response.getPersonDatas().size());
    
    List<PersonData> list = response.getPersonDatas();
    
    Map<String , String> someHashMap = new HashMap<String , String>();
    someHashMap.put("17072017", "DateOfBirth");
    
    List<String> filteredLst = someHashMap.entrySet().stream()
            .filter(e -> list.contains(e.getKey()))
            .map(Map.Entry::getValue)
            .collect(Collectors.toList());
    System.out.println("******" filteredLst);
}
}
 

Я пытаюсь проверить, содержит ли список ключ карты, если совпадение заменяется значением карты.
Код, который я написал, возвращает пустой список.

Комментарии:

1. List Содержит PersonData s. Ключи карты являются строками. Поэтому list.contains(e.getKey()) всегда будет возвращать false.

2. Как отфильтровать его и заменить этой строкой.

3. Это зависит от того PersonData , как выглядит класс.

4. публичный класс PersonData { частное лицо person; публичное лицо getPerson() { возвращает person; } публичный void setPerson(Person person) { this.person = person; } } публичный класс Person { частная строка FirstName; частная строка LastName; публичная строка getFirstName() { возвращает FirstName; } публичный void setFirstName(Строка FirstName) { this.FirstName = FirstName; } общедоступная строка getLastName() { возвращает LastName; } public void setLastName(строка LastName) { LastName = LastName; } }

5. Если он не содержит свойство date of birth (тип которого — String), как вы ожидаете, что ключи на вашей карте будут иметь какое-либо отношение к элементам списка?

Ответ №1:

Если дата рождения хранится в свойстве last name (что является странным выбором), фильтрация должна быть следующей:

 List<String> filteredLst = someHashMap.entrySet().stream()
        .filter(e -> list.stream()
                         .map(p->p.getPerson().getLastName())
                         .anyMatch(lastname -> lastname.equals(e.getKey())))
        .map(Map.Entry::getValue)
        .collect(Collectors.toList());