Преобразование карты в список с использованием Java 8 сопоставления с образцом - PullRequest
0 голосов
/ 27 марта 2020

У меня есть требование хранить эти ключи сотрудников, соответствующие Address1, новому List<EmpData>, код приведен ниже, я могу сделать это обычными итерациями.

Могу ли я сделать это с помощью сопоставления с шаблоном java8 используя collect и filter et c.?

public static void main(String[] args) {
    List<EmpData> lst1 = new ArrayList<EmpData>();
    List<EmpData> lst2 = new ArrayList<EmpData>();
    EmpData obj1=new EmpData("100", "Name1", "25/05/1979");
    EmpData obj2=new EmpData("101", "Name2", "25/05/1975");
    EmpData obj3=new EmpData("103", "Name3", "25/05/1976");
    lst1.add(obj1);
    lst1.add(obj2);
    lst2.add(obj3);

    HashMap<String, List<EmpData>> map = new HashMap<>();

    map.put("Address1Emp1", lst1);
    map.put("Address2Emp2", lst2);

    List<EmpData> listEmp = new ArrayList<>();
    //Need to store those employees key matching Address1 to a List<EmpData>

}

Ответы [ 2 ]

5 голосов
/ 27 марта 2020

Полагаю, вы имели в виду потоки от java -8 и требование, чтобы ключ соответствовал "Address1Emp.*" регулярному выражению.

Вы можете использовать следующий код:

map.entrySet().stream() // create a stream of entries
    .filter(e -> e.getKey().matches("Address1Emp.*")) // leave only those entries, whose keys start with "Address1"
    .map(Map.Entry::getValue) // get values only
    .collect(Collectors.toList()); 

Изменить после добавления внутренних списков:

map.entrySet().stream() // create a stream of entries
    .filter(e -> e.getKey().matches("Address1Emp.*")) // leave only those entries, whose keys start with "Address1"
    .flatMap(e -> e.getValue().stream()) // get values only
    .collect(Collectors.toList()); 
2 голосов
/ 27 марта 2020

В зависимости от того, какой шаблон вам нужен, вы можете использовать startsWith

List<EmpData> listEmp = map.entrySet().stream()
    .filter(e -> e.getKey().startsWith("Address1"))
    .map(Entry::getValue)
    .collect(Collectors.toList());

или с contains:

List<EmpData> listEmp = map.entrySet().stream()
    .filter(e -> e.getKey().contains("Address1"))
    .map(Entry::getValue)
    .collect(Collectors.toList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...