Javaの8ラムダ:一覧へ地図一覧の<Object []>(オブジェクト配列の一覧)<豆>

遺伝子b。

私は、Object配列のリストを受け取ります

List<Object[]> rawRows = service.getRows();

任意の特定の値は、例えばとして得ることができます

(Date)((Object[])rawRows.get(i))[3]  // In each item, Array Element #3 is a certain Date

私はこれをマッピングする必要がありList<Report>、それぞれの値に対して定義された特定のフィールドを持つPOJOのために:

public class Report {
    private String abbreviation;
    private String username;
    private Integer recallid;
    private Date recalldate;
    // ... + getters/setters   

    // Constructor
    public Report (String abbreviation, String username, Integer recallid, Date recalldate, ...)
    {
    }
}

私は次に困惑:どのように私のように指定したインデックスを私の新しいにマップするために、このラムダ式でList<Report>

List<Report> detailReports =  rawRows.stream().map(obj -> new Report(
            (String)((Object[])rawRows.get(0))[0], // I'm hard-coding (0) but need "i"
            (String)((Object[])rawRows.get(0))[1], // I'm hard-coding (0) but need "i"
            (Integer)((Object[])rawRows.get(0))[2],// I'm hard-coding (0) but need "i"
            (Date)((Object[])rawRows.get(0))[3],   // I'm hard-coding (0) but need "i"
            //...
                           )).collect(Collectors.toList());             

私の目標は持っていることですList<Report>正確に指定された列ごとにオブジェクトごとPOJOにマッピングされたすべての配列要素で。しかし、誰がないi私が追跡するための指標。この例では、私はハードコーディングしてい0rawRow、元のリストから取得します。

MyStackRunnethOver:

まず、あなたからラムダを変更します

obj -> new Report((String)((Object[])rawRows.get(0))[0] ...

obj -> new Report((String) obj[0] ...

objラムダパラメータであり、中にmap()関数内の各項目の値になりますrawRows

次に、私は本当に独立した、という名前の関数にラムダの変換をお勧めします。これは、署名を持っているでしょうpublic Report rawRowToReport(Object[] rawRow)し、すべてのインデックスのロジックを開催する代わりに、ラムダ体でそれを書きます。

あなたは、気づいたとしてその理由は、ある「全くありませんi、私が追跡するための指標は、」で行われているインデックスがあるため、これは次のとおりです。i生の行自体にあります。それは本当にただのです、デシリアライゼーション・ロジックにあるもののためにObject[]ロジックのこの種の唯一のシリアル化および/またはデシリアライズを扱う独自の方法(または理想的クラス)にカプセル化する必要があります。(あなたのような外部のユーザーはStream)そのクラスやメソッドに核心を委任します。最終的には、Streamデータだけを反復処理し、フィルタおよび変換を適用するプロセスを処理します。これは、これらのフィルタと変換が必要かわかりません。

rawRows.stream().map(this::rawRowToReport).collect(Collectors.toList());

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=478320&siteId=1