当前位置: 首页 > 知识库问答 >
问题:

在Java 8中使用stream()到达json中的元素[重复]

公孙琛
2023-03-14

我正在做我的项目,然后我需要Json数据中的reach an元素看起来像:

[
  {
    "name": "Meltem",
    "items": [
      {
        "name": "Yilmaz",
        "histories": [
          {
            "date": 1615370705561,
            "school": "BAU"
          }
        ]
       }
     ]
   }
] 

因此,我可以用以下方法访问name元素:

var myData = data().
                stream().
                filter(x -> x.getName().equals("Meltem"))
                .collect(Collectors.toList())
                .get(0);

那么,如何在java 8中使用stream()到达学校呢?

还有,我调用的< code>getName();

@Getter
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
        "name",
        "items",
})
public class Package {
@JsonProperty("name")
    private String name;
@JsonProperty("items")
    private List<Item> items;
}

共有3个答案

李兴安
2023-03-14
var myData = data().
            stream().
            filter(x -> x.getName().equals("Meltem"))
            .collect(Collectors.toList())
            .get(0).getHistories().get(0).getSchool();

这对你有用吗?

洪光霁
2023-03-14

这应该是有效的:

var myData = data.stream()
                     .filter(x -> x.getName().equals("Meltem"))
                     .flatMap(x -> x.getItems().stream())
                     .filter(x -> x.getName().equals("Yilmaz"))
                     .flatMap(x -> x.getHistories().stream())
                     .map(History::getSchool)
                     .collect(Collectors.toList());

假设你的类看起来像这样:

public static class Package {
    private String name;
    private List<Item> items;

    public String getName() {
        return name;
    }

    public List<Item> getItems() {
        return items;
    }
}

public static class Item {
    private String name;
    private List<History> histories;

    public String getName() {
        return name;
    }

    public List<History> getHistories() {
        return histories;
    }
}

public static class History {
    private String school;

    public String getSchool() {
        return school;
    }
}
王辉
2023-03-14

flatMap是您的朋友:

var mySchool = data().
    stream()
    .filter(x -> x.getName().equals("Meltem"))
    .flatMap(x->x.getItems().stream())
    .flatMap(item->item.getHistories().stream())
    .map(history->history.getSchool())
    .collect(Collectors.toList())
    .get(0);

我提供的代码为您提供了一个列表,其中包含所有历史记录中的所有学校,以及名为 MeItem 的所有包中的所有项目。

如果您只想获取第一个元素,我会使用< code>Stream#findFirst而不将其转换为< code>List:

var mySchool = data().
    stream()
    .filter(x -> x.getName().equals("Meltem"))
    .flatMap(x->x.getItems().stream())
    .flatMap(item->item.getHistories().stream())
    .map(history->history.getSchool())
    .findFirst()
    .orElse(null);//or use the Optional for whatever you want
 类似资料:
  • 本文向大家介绍Java8中Lambda表达式使用和Stream API详解,包括了Java8中Lambda表达式使用和Stream API详解的使用技巧和注意事项,需要的朋友参考一下 前言 Java8 的新特性:Lambda表达式、强大的 Stream API、全新时间日期 API、ConcurrentHashMap、MetaSpace。总得来说,Java8 的新特性使 Java 的运行速度更快、

  • 本文向大家介绍java8中Stream的使用示例教程,包括了java8中Stream的使用示例教程的使用技巧和注意事项,需要的朋友参考一下 前言 Java8中提供了Stream对集合操作作出了极大的简化,学习了Stream之后,我们以后不用使用for循环就能对集合作出很好的操作。 本文将给大家详细介绍关于java8 Stream使用的相关内容,下面话不多说了,来一起看看详细的介绍吧 1. 原理 S

  • 我试图列出整数列表中的重复元素,例如, 使用jdk 8的流。有人试过吗?要删除重复项,我们可以使用distinct() api。但是如何找到重复的元素呢?有人能帮我吗?

  • 我有以下几门课: 我有一个物品清单。我想遍历列表并找到具有特定ID的实例。我试着通过溪流来做。

  • 问题内容: 我正在尝试将元素添加到python中的json文件中,但我无法做到这一点。 这是我直到现在尝试的内容(删除了一些变化): 但是,我得到的是: 很好,因为我还需要添加一个新行而不是一个元素,但是我想得到这样的东西: 我应该如何添加新元素? 问题答案: 你可以这样做。

  • 问题内容: 我知道如何从-> “转换”一个简单的Java ,即: 现在,我想对地图进行基本相同的操作,即: 解决方案不应限于-> 。就像上面的示例一样,我想调用任何方法(或构造函数)。 问题答案: 它不如列表代码那么好。您不能在通话中构造new ,因此工作会混入通话中。