我是lambda表达式和函数编程的新手。
我使用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
上面的代码可以正常工作,但这是一个意大利面条 代码。
我阅读了许多文章,指出我们不应该在lambda表达式中使用 { } ,因为这样会使代码难以理解。
因此,现在我正在尝试将其转换为 Functional 方式。
请帮忙。
答案 0 :(得分:0)
这可能就是您想要的
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);