将对象列表与映射键进行比较并将列表值的值替换为映射值

时间:2021-01-27 06:09:05

标签: 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 个答案:

答案 0 :(得分:0)

如果出生日期存储在姓氏属性中(这是一个奇怪的选择),过滤应该如下:

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());