У меня есть этот список ответов JSON API:
[
{
"id": "demoType",
"label": "Demo Type",
"option": [
"MAJOR"
]
},
{
"id": "test",
"label": "test",
"option": [
{
"name": "testOne",
"id": "1111",
"demolId": "demoid-1"
},
{
"name": "testTwo",
"id": "2222",
"demoId": "demoid-3"
},
{
"name": "testThree",
"id": "3333",
"demolId": "demo-2"
}
]
},
{
"id": "sampleType",
"label": "sample",
"option": [
{
"name": "sampleA",
"id": "4444"
}
]
},
{
"id": "runType",
"label": "run one",
"option": [
{
"name": "runA",
"id": "eaf7d6a5-2038-45a0-9f06-6410694e5354",
"demoId": "demolid-1"
}
]
},
{
"id": "city",
"label": "City",
"option": [
"york",
"tampa"
]
}
]
У меня есть соответствующий ответDTO:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DemoResponse {
public String id;
public String label;
public ArrayList<Object> option;
}
Ответ API имеет свойство под названием option, которое несколько раз появляется во вложенном списке. Чего я хочу добиться, так это собрать значения всех свойств параметров в список.
Я пробовал так:
DemoResponse[] response = (BaseClient.getResponse().as(DemoResponse[].class));
List<String> optionlList =
response.stream().map(newList -> newdList.toString()).collect(Collectors.toList());
Stream не удалось скомпилировать. Я убежден, что то, что я делаю, явно неправильно, но я не уверен, как добиться того, чего я хочу, а именно получить все значения полей параметров в ответе API и собрать их в список.
Над массивом нет .stream(), вам нужно использовать Arrays.stream
DemoResponse[] response = (BaseClient.getResponse().as(DemoResponse[].class));
List<String> optionlList =
Arrays.stream(response).map(res -> res.option.toString()).collect(Collectors.toList());
Вы можете сделать, как показано ниже, пропустить через массив response и опцию flatMap и собрать в один список.
DemoResponse[] response = (BaseClient.getResponse().as(DemoResponse[].class));
List<String> optionList = Arrays.stream(response)
.flatMap(demoResponse -> demoResponse.getOption().stream())
.map(Object::toString)
.collect(Collectors.toList());
Ваш optionList будет
[MAJOR, {name=testOne, id=1111, demolId=demoid-1}, {name=testTwo, id=2222, demoId=demoid-3}, {name=testThree, id=3333, demolId=demo-2}, {name=sampleA, id=4444}, {name=runA, id=eaf7d6a5-2038-45a0-9f06-6410694e5354, demoId=demolid-1}, york, tampa]
Каким вы хотите, чтобы ваш optionList был?