【发布时间】:2021-01-13 15:20:25
【问题描述】:
我对 Java 还是很陌生,而且我对函数式编程很熟悉。在这里,我正在尝试编写最简洁的工厂方法来创建基于从 API 检索到的 JSONArray 的 List<Manager>。这是我的想法的简化版本
public List<Manager> getManagers(HashMap parameters) throws IOException, InterruptedException {
JSONArray records = (JSONArray) api.getData("Manager", parameters).get("records");
records.forEach(x -> new Manager(x.get("FirstName"),x.get("LastName")))
以及我将如何在 python 中做到这一点(我有很大的偏见)
manager_list = list(map(lambda x: Manager(x["FirstName"],x["LastName"]),records))
我遇到了两个问题。
- 访问 lambda 表达式 中的 JSONObject 字段
尽管 x 是 JSONObject
records.forEach(x -> System.out.println(x.getClass()));
class org.json.JSONObject
x.get("FirstName") 在 lambda 中不起作用。是因为.get() 是一个实例方法还是我遗漏了其他东西?
- 轻松将
Managers附加到列表中
这不起作用
List managers = records.forEach(x -> new Manager(x.get("FirstName"),x.get("LastName")))
因为forEach 返回void。 forEach 有表亲可以返回任何类型的 Interable 或 Collection 吗?
由于我是 java 新手,我既对我的实际问题的实现感兴趣,也对现代 java 中的函数式编程进行更一般的讨论
【问题讨论】:
-
你确定
org.json.JSONObject是Iterable? -
JSONObject,不知道。当然,JSONArray是可迭代的。使用System.out.println(x)显示单个 json 对象没有问题 -
x.get('FirstName')你这里用的是单引号,只是想知道代码是怎么编译的。 -
@GyowannyPessattoQueiroz 我的错。更正
-
@TheHeadRush 是的,我是分心型
标签: java json lambda functional-programming