Поток в потоке, используя два списка - PullRequest
0 голосов
/ 23 октября 2019

У меня 2 списка сотрудников. Один список содержит имя и employeeId, а второй список employeeId и номер мобильного телефона. идентификатор сотрудника является первичным ключом. Требуется получить список, который содержит идентификатор, имя и номер мобильного телефона без использования потоковой передачи.

public class MainApp {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Employee emp1 = new Employee(101, "Shiv1");
        Employee emp2 = new Employee(102, "Shiv2");
        Employee emp3 = new Employee(103, "Shiv3");
        Employee emp4 = new Employee(104, "Shiv4");

        Employee emp5 = new Employee(101, 00001);
        Employee emp6 = new Employee(101, 00002);
        Employee emp7 = new Employee(101, 00003);
        Employee emp8 = new Employee(101, 00004);

        List<Employee> employeeNameList = new ArrayList<Employee>();
        employeeNameList.add(emp1);
        employeeNameList.add(emp2);
        employeeNameList.add(emp3);
        employeeNameList.add(emp4);

        List<Employee> employeeMobileList = new ArrayList<Employee>();
        employeeMobileList.add(emp5);
        employeeMobileList.add(emp6);
        employeeMobileList.add(emp7);
        employeeMobileList.add(emp8);

        employeeNameList.stream()
            .filter(item -> item.getId() == 3)
            .map(i -> i.setMobileNo(9089));
    }
}

1 Ответ

1 голос
/ 23 октября 2019
  1. Вы можете создать отображение empId на name, используя первый список.

    Map<Integer, String> empIdToName = employeeNameList.stream()
            .collect(Collectors.toMap(Employee::getId, Employee::getName, (a, b) -> a));
    
  2. Используйте такое отображение для созданияобъекты далее, просматривая секунду и просматривая эту карту, например:

    List<Employee> employees = employeeMobileList.stream()
            .filter(item -> empIdToName.containsKey(item.getId()))
            .map(i -> new Employee(i.getId(), empIdToName.get(i.getId()), i.getMobileNo()))
            .collect(Collectors.toList());
    
...