Как написать код ниже для функционального использования Java 8 - PullRequest
0 голосов
/ 09 февраля 2019

Я новичок в лямбда-выражениях и функциональном программировании.Я написал ниже фрагмент кода с использованием Java 8.

     List<Employee> myList = new ArrayList<>();
     Map<String, List<Integer>> mapOf = new HashMap<>();
     mapOf.put("key1", Arrays.asList(1, 2, 3));

     mapOf.put("key2", Arrays.asList(4, 5, 6));
     mapOf.put("key3", Arrays.asList(7, 8));

     mapOf.forEach((k ,v) -> {
         Employee emp = new Employee();
         v.stream().forEach(o ->{
             emp.setFirstName("John Doe");
             myList.add(emp);
             System.out.println("Posting Data for :: " + k + " :: " + o);
         });
     });

Ожидаемый результат

Posting Data for :: key1 :: 1
Posting Data for :: key1 :: 2
Posting Data for :: key1 :: 3
Posting Data for :: key2 :: 4
Posting Data for :: key2 :: 5
Posting Data for :: key2 :: 6
Posting Data for :: key3 :: 7
Posting Data for :: key3 :: 8

Приведенный выше код работает, как и ожидалось, но это спагетти код .Я прочитал много статей о том, что мы не должны использовать { } внутри лямбда-выражений, поскольку это затрудняет понимание кода.Итак, теперь я пытаюсь преобразовать его в Функциональный способ.Пожалуйста, помогите.

1 Ответ

0 голосов
/ 09 февраля 2019

это, вероятно, то, что вы хотите

ArrayList<Employee> myL = mapOf.entrySet()
        .stream()
            .map(en ->
                  en.getValue().stream()
                    .map(l ->{
                        Employee emp = new Employee();
                        emp.setFirstName("John Doe");
                        System.out.println("Posting Data for :: " + en.getKey() + " :: " + l);
                        return emp;
                    }).collect(Collectors.toList())
                )
            .collect(ArrayList::new, ArrayList::addAll,ArrayList::addAll);
...