Java 如何按字段打印类对象的内容?

Java 如何按字段打印类对象的内容?,java,json,jackson,pojo,Java,Json,Jackson,Pojo,我有一个POJO类,Location,用于将JSON文件映射到使用Jackson的类。当前的实现可以通过调用Location的toString()打印出类中的每个Location对象,但我想知道如何打印,例如,只打印id=“2”的Location对象,即name=“Desert” 目前,我使用这样的toString方法来打印Location的所有内容: public String toString() { return "Location [location=" + Arrays

我有一个POJO类,
Location
,用于将JSON文件映射到使用Jackson的类。当前的实现可以通过调用Location的toString()打印出类中的每个Location对象,但我想知道如何打印,例如,只打印id=“2”的Location对象,即name=“Desert”

目前,我使用这样的toString方法来打印Location的所有内容:

public String toString() {
        return "Location [location=" + Arrays.toString(location) + ", id=" + id
                + ", description=" + description + ", weight=" + weight
                + ", name=" + name + ", exit=" + Arrays.toString(exit)
                +"]";
    }
有人知道如何根据字段id打印Location对象中的特定位置吗

这是在Location类上调用toString()时存储在该类中的内容的示例:

Location对象中一个位置的示例:

[Location [location=null, id=1, description=You are in the city of Tiberius. You see a long street with high buildings and a castle.You see an exit to the south., weight=100, name=Tiberius, exit=[Exit [title=Desert, direction=South]]]
这是我用来将JSON字段映射到类的POJO location类:

public class Location {

    private Location[] location;

    private int id;

    private String description;

    private String weight;

    private String name;

    private Exit[] exit;

    private boolean visited = false;
    private boolean goalLocation;
    private int approximateDistanceFromGoal = 0;
    private Location parent;




    public Location[] getLocation() {
        return location;
    }

    public void setLocation(Location[] location) {
        this.location = location;
    }


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDescription ()
    {
        return description;
    }

    public void setDescription (String description)
    {
        this.description = description;
    }


    public String getWeight() {
        return weight;
    }

    public void setWeight(String weight) {
        this.weight = weight;
    }

    public String getName ()
    {
        return name;
    }

    public void setName (String name)
    {
        this.name = name;
    }

    public Exit[] getExit() {
        return exit;
    }

    public void setExit(Exit[] exit) {
        this.exit = exit;
    }


    public boolean isVisited() {
        return visited;
    }

    public void setVisited(boolean visited) {
        this.visited = visited;
    }

    public boolean isGoalLocation() {
        return goalLocation;
    }

    public void setGoalLocation(boolean goalLocation) {
        this.goalLocation = goalLocation;
    }

    public int getApproximateDistanceFromGoal() {
        return approximateDistanceFromGoal;
    }

    public void setApproximateDistanceFromGoal(int approximateDistanceFromGoal) {
        this.approximateDistanceFromGoal = approximateDistanceFromGoal;
    }

    public Location getParent() {
        return parent;
    }

    public void setParent(Location parent) {
        this.parent = parent;
    }

    @Override
    public String toString() {
        return "Location [location=" + Arrays.toString(location) + ", id=" + id
                + ", description=" + description + ", weight=" + weight
                + ", name=" + name + ", exit=" + Arrays.toString(exit)
                +"]";
    }



}

您可以尝试使用
gson
,它输入一个对象并输出一个JSON或另一侧

在将对象变成JSONObject之后,可以遍历JSON以遍历对象

Stream.of(location).filters(l -> l.getId() == 2).foreach(System.out::println);
这样行吗?


<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.0</version>
</dependency>
org.apache.commons 在哪里

'Visitor'->您的谓词

“this”->“this.id”

这是因为您的toString()正在调用嵌套位置对象的toString(),这些对象也有用于筛选的谓词集

如果您无法控制过滤器的结构,您可以使用以下方法:

 public String toString() {
           StringBuilder buffer = new StringBuilder();
           int i = 0;
           for(Location l = this; i < locations.length; l = locations[i++])
              if(filter.apply(l.id) { 
                 buffer.append("Location [location=" + Arrays.toString(location) + ", id=" + id
                    + ", description=" + description + ", weight=" + weight
                    + ", name=" + name + ", exit=" + Arrays.toString(exit)
                    +"]");
              }
           return buffer.toString();
         }
公共字符串toString(){
StringBuilder缓冲区=新的StringBuilder();
int i=0;
对于(位置l=this;i
它说我需要改变,项目合规性和JRE到1.8,这会影响/破坏我当前的项目吗?升级虚拟机不应该。但我看到了一些疯狂的想法。这确实意味着,如果你要在生产中使用它,你的应用程序必须部署在1.8上,只有1.8。好的,那就不是运行程序了,project n要在Java 1.5上运行和部署的EED。您对此Java版本有其他解决方案吗?:)为了澄清,我希望能够从位置列表中按ID打印位置,例如,使用ID=“2”打印位置将打印
位置[location=null,id=2,description=您在炎热沉闷的沙漠中,周围是沙丘和虚无,您看到一个向南的出口,重量=100,名称=沙漠,出口=[exit[title=耶路撒冷,方向=南]],
@BrianJ u可以搜索
gson
的示例经过再三考虑,我似乎应该使用一个图形来表示位置列表,并通过位置方法访问位置。我发布了一个新问题,与从列表中创建图形有关:
 public String toString() {
           StringBuilder buffer = new StringBuilder();
           int i = 0;
           for(Location l = this; i < locations.length; l = locations[i++])
              if(filter.apply(l.id) { 
                 buffer.append("Location [location=" + Arrays.toString(location) + ", id=" + id
                    + ", description=" + description + ", weight=" + weight
                    + ", name=" + name + ", exit=" + Arrays.toString(exit)
                    +"]");
              }
           return buffer.toString();
         }