使用 stream() 将嵌套列表转换为列表
Use stream() to convert nested list into list
我有一个数组列表 'response',每个元素都包含一个对象 Meta 和 List(Values),即包含嵌套列表和每个嵌套列表的一些元数据的列表。我想在此使用 stream() 来创建一个新列表。新列表将包含所有值对象及其相应的元数据。我如何使用 response.stream() 来完成此操作?
//Input
Meta meta1 = new Meta("name1");
Meta meta2 = new Meta("name2");
Meta meta3 = new Meta("name3");
List<Values> values1 = new ArrayList<>();
values1.add(new Values("1 Aug", 1.0F));
values1.add(new Values("2 Aug", 2.0F));
values1.add(new Values("3 Aug", 3.0F));
List<Values> values2 = new ArrayList<>();
values2.add(new Values("1 Aug", 4.0F));
values2.add(new Values("2 Aug", 5.0F));
values2.add(new Values("3 Aug", 6.0F));
List<Values> values3 = new ArrayList<>();
values3.add(new Values("1 Aug", 7.0F));
values3.add(new Values("2 Aug", 8.0F));
values3.add(new Values("3 Aug", 9.0F));
Response response1 = new Response(meta1, values1);
Response response2 = new Response(meta2, values2);
Response response3 = new Response(meta3, values3);
List<Response> response = new ArrayList<>();
response.add(response1);
response.add(response2);
response.add(response3);
//use response.stream()...
//output
List<MetaValue> metaValueList = new ArrayList<>();
metaValueList.add(new MetaValue("name1", "1 Aug", 1.0F));
metaValueList.add(new MetaValue("name1", "2 Aug", 2.0F));
metaValueList.add(new MetaValue("name1", "3 Aug", 3.0F));
metaValueList.add(new MetaValue("name2", "1 Aug", 4.0F));
metaValueList.add(new MetaValue("name2", "2 Aug", 5.0F));
metaValueList.add(new MetaValue("name2", "3 Aug", 6.0F));
metaValueList.add(new MetaValue("name3", "1 Aug", 7.0F));
metaValueList.add(new MetaValue("name3", "2 Aug", 8.0F));
metaValueList.add(new MetaValue("name3", "3 Aug", 9.0F));
您需要流式传输响应并对值进行平面映射。由于您没有提供 class 定义,因此我对命名采取一些自由,但这应该给您一个想法:
List<MetaValue> metaValueList = response.stream()
.flatMap(r -> r.getValues()
.stream()
.map(v -> new MetaValue(r.getMeta().getName(), v.getDate(), v.getValue())))
.collect(Collectors.toList());
我有一个数组列表 'response',每个元素都包含一个对象 Meta 和 List(Values),即包含嵌套列表和每个嵌套列表的一些元数据的列表。我想在此使用 stream() 来创建一个新列表。新列表将包含所有值对象及其相应的元数据。我如何使用 response.stream() 来完成此操作?
//Input
Meta meta1 = new Meta("name1");
Meta meta2 = new Meta("name2");
Meta meta3 = new Meta("name3");
List<Values> values1 = new ArrayList<>();
values1.add(new Values("1 Aug", 1.0F));
values1.add(new Values("2 Aug", 2.0F));
values1.add(new Values("3 Aug", 3.0F));
List<Values> values2 = new ArrayList<>();
values2.add(new Values("1 Aug", 4.0F));
values2.add(new Values("2 Aug", 5.0F));
values2.add(new Values("3 Aug", 6.0F));
List<Values> values3 = new ArrayList<>();
values3.add(new Values("1 Aug", 7.0F));
values3.add(new Values("2 Aug", 8.0F));
values3.add(new Values("3 Aug", 9.0F));
Response response1 = new Response(meta1, values1);
Response response2 = new Response(meta2, values2);
Response response3 = new Response(meta3, values3);
List<Response> response = new ArrayList<>();
response.add(response1);
response.add(response2);
response.add(response3);
//use response.stream()...
//output
List<MetaValue> metaValueList = new ArrayList<>();
metaValueList.add(new MetaValue("name1", "1 Aug", 1.0F));
metaValueList.add(new MetaValue("name1", "2 Aug", 2.0F));
metaValueList.add(new MetaValue("name1", "3 Aug", 3.0F));
metaValueList.add(new MetaValue("name2", "1 Aug", 4.0F));
metaValueList.add(new MetaValue("name2", "2 Aug", 5.0F));
metaValueList.add(new MetaValue("name2", "3 Aug", 6.0F));
metaValueList.add(new MetaValue("name3", "1 Aug", 7.0F));
metaValueList.add(new MetaValue("name3", "2 Aug", 8.0F));
metaValueList.add(new MetaValue("name3", "3 Aug", 9.0F));
您需要流式传输响应并对值进行平面映射。由于您没有提供 class 定义,因此我对命名采取一些自由,但这应该给您一个想法:
List<MetaValue> metaValueList = response.stream()
.flatMap(r -> r.getValues()
.stream()
.map(v -> new MetaValue(r.getMeta().getName(), v.getDate(), v.getValue())))
.collect(Collectors.toList());