Java Lambda Expression消息格式化,中断和字符串连接

时间:2017-05-01 18:28:20

标签: java lambda java-8 java-stream

围绕Lambda Expressions的一个简单问题。我有以下文字:

  

{"主机":[{"磁盘":[{"路径":" /"" SPACE_USED& #34;:0.608}],"主机名":"主机1"},{"磁盘":[{"路径":&# 34; /"" SPACE_USED":0.79},{"路径":" /选择"" SPACE_USED":0.999 }],"主机名":"主机2"},{"磁盘":[{"路径":" /&# 34;," SPACE_USED":0.107}],"主机名":" host3上"}]}

我想将上述内容格式化为每行阅读:

  

{"主机名":"主机1","磁盘":["路径' /'已经使用了60.8%"]}

     

{"主机名":"主机2","磁盘":["路径' /'已经使用了79%"," Path' / opt'使用了99.9%"]}

     

{"主机名":"主机3","磁盘":["路径' /'已经使用了10.7%"]}

我在.stream()。map()和.collect()周围尝试了一些排列,但不知怎的,我得到了我需要的输出。如果问题相当愚蠢,那么任何帮助都会受到高度赞赏和道歉。感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用Jackson 2 Library将JSON-String转换为Java对象。

在你的具体案例中你可以例如创建以下类:

<强> Disk.java

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"path", "space_used"})
public class Disk implements Serializable {

  private final static long serialVersionUID = -6127352847480270783L;

  @JsonProperty("path")
  private String path;

  @JsonProperty("space_used")
  private Double spaceUsed;

  @JsonIgnore
  private Map<String, Object> additionalProperties = new HashMap<String, Object>();

  @JsonProperty("path")
  public String getPath() {
    return path;
  }

  @JsonProperty("path")
  public void setPath(String path) {
    this.path = path;
  }

  @JsonProperty("space_used")
  public Double getSpaceUsed() {
    return spaceUsed;
  }

  @JsonProperty("space_used")
  public void setSpaceUsed(Double spaceUsed) {
    this.spaceUsed = spaceUsed;
  }

  @JsonAnyGetter
  public Map<String, Object> getAdditionalProperties() {
    return this.additionalProperties;
  }

  @JsonAnySetter
  public void setAdditionalProperty(String name, Object value) {
    this.additionalProperties.put(name, value);
  }
}

Host.java

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"disks", "hostname"})
public class Host implements Serializable {

  private final static long serialVersionUID = -1972892789688333505L;

  @JsonProperty("disks")
  private List<Disk> disks = null;

  @JsonProperty("hostname")
  private String hostname;

  @JsonIgnore
  private Map<String, Object> additionalProperties = new HashMap<String, Object>();

  @JsonProperty("disks")
  public List<Disk> getDisks() {
    return disks;
  }

  @JsonProperty("disks")
  public void setDisks(List<Disk> disks) {
    this.disks = disks;
  }

  @JsonProperty("hostname")
  public String getHostname() {
    return hostname;
  }

  @JsonProperty("hostname")
  public void setHostname(String hostname) {
    this.hostname = hostname;
  }

  @JsonAnyGetter
  public Map<String, Object> getAdditionalProperties() {
    return this.additionalProperties;
  }

  @JsonAnySetter
  public void setAdditionalProperty(String name, Object value) {
    this.additionalProperties.put(name, value);
  }
}

HostContainer.java

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"hosts"})
public class HostContainer implements Serializable {

  private final static long serialVersionUID = 7917934809738573749L;

  @JsonProperty("hosts")
  private List<Host> hosts = null;

  @JsonIgnore
  private Map<String, Object> additionalProperties = new HashMap<String, Object>();

  @JsonProperty("hosts")
  public List<Host> getHosts() {
    return hosts;
  }

  @JsonProperty("hosts")
  public void setHosts(List<Host> hosts) {
    this.hosts = hosts;
  }

  @JsonAnyGetter
  public Map<String, Object> getAdditionalProperties() {
    return this.additionalProperties;
  }

  @JsonAnySetter
  public void setAdditionalProperty(String name, Object value) {
    this.additionalProperties.put(name, value);
  }

}

用法:

  public void parseMessage() throws IOException {
    String msg = "{\"hosts\":[{\"disks\":[{\"path\":\"/\",\"space_used\":0.608}]," +
                 "\"hostname\":\"host1\"},{\"disks\":[{\"path\":\"/\",\"space_used\":0.79}," +
                 "{\"path\":\"/opt\",\"space_used\":0.999}],\"hostname\":\"host2\"}," +
                 "{\"disks\":[{\"path\":\"/\",\"space_used\":0.107}],\"hostname\":\"host3\"}]}";
    ObjectMapper mapper = new ObjectMapper();

    // This object will contain all the information you need, access it using e.g. getHosts();
    HostContainer hostContainer = mapper.readValue(msg, HostContainer.class);
  }