我正在尝试将json文件解析为一组项目,这些项目将字符串列表作为其构造函数的参数。
从json文件中,我正在读取一个包含字符串的数组,如下所示:
{
"items": [
{
"description": [
"Description line 1",
"Description line 2",
"Line 3 and so on..."
]
},
{
"description": [
"Another line",
"You get the picture",
"any string will do"
]
}
}
我有一个静态方法,该方法将文件路径作为String并从文件中读取项目。
private static final String ITEMS = "items";
public static Set<Item> getItemsFromFile(String filePath)
{
try
{
JSONObject root = (JSONObject) new JSONParser().parse(new FileReader(filePath));
Set<Item> items = new HashSet<>();
for (Object item : (JSONArray) root.get(ITEMS))
{
List<String> description = getDescription((JSONObject) item);
Item temp = new Item(description);
items.add(temp);
}
return items;
}
catch (IOException | ParseException e)
{
return new HashSet<>();
}
}
我对getDescription(JSONObject jsonItem)
的实现如下:
private static final String DESCRIPTION = "description";
public static List<String> getDescription(JSONObject jsonItem)
{
if (jsonItem.get(DESCRIPTION) != null)
{
return ((JSONArray) jsonItem.get(DESCRIPTION)) // Produces a compiler error
.stream() // return type should be List<String>
.map(Object::toString) // but is Object
.collect(Collectors.toList());
}
else
{
return null;
}
}
此代码中的Stream产生编译器错误,表示语句的返回类型为List的对象 类型。我想知道为什么这是一个对象而不是列表,并弄清楚应该怎么做才能使我仍然可以使用流。