簡體   English   中英

使用Java 8將String列表轉換為Object列表

[英]Using Java 8 to convert a list of String into a list of Object

有一個從文件讀取的流,每一行的內容如下:

 {"uid":"5981865218","timestamp":1525309552069,"isHot":true}

用戶類別:

public class User {
    private String uid;
    private long timestamp;
    private boolean isHot;

    public String getUid() {
        return uid;
    }

    public void setUid(String uid) {
        this.uid = uid;
    }

    public long getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(long timestamp) {
        this.timestamp = timestamp;
    }

    public boolean getIsHot() {
        return isHot;
    }

    public void setIsHot(boolean isHot) {
        this.isHot = isHot;
    }
}

我想從文件流中獲取對象“列表”列表的代碼:

BufferedReader targetBr = null;
targetBr = new BufferedReader(new FileReader(targetUsersFile));
List<User> tmpUsers = targetBr.lines().?I don't know how process in there?.collect(Collectors.toList());

您需要將String反序列化為User對象。 我在這里使用過Jackson Jackson ObjectMapper (您可以很好地使用Gson等其他產品)。

ObjectMapper objectMapper = new ObjectMapper();
...
targetBr.lines()
        .map(line -> {
            try {
                return objectMapper.readValue(line, User.class);
            } catch (IOException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }).collect(Collectors.toList());

流的map部分帶有一個Function ,因此您不能從那里拋出一個檢查異常。 因此,我將Jackson的readValue拋出(可能拋出)的IOException封裝到RuntimeException中。 您可能需要根據需要更改該部分。

這只是一個開始。 考慮當存在無法反序列化為User的無效條目時該怎么辦。 一些特定的極端情況:

  1. 如果輸入字符串中存在無法識別的字段(User類中不存在的屬性),該怎么辦。 在這種情況下,ObjectMapper拋出UnrecognizedPropertyException異常。 您可以找到忽略它的方法。
  2. 如果“字符串”中缺少User類中的一個或多個字段,該怎么辦...其中某些/全部是強制性的...?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM