1

JoinRowSet (jrs) と TreeMap (finalTM) があります。TreeMap のキーに for ループ サイクルがあり、キーごとに、Java 8 ラムダ式を使用して、この列が TreeMap キーの値と等しい JoinRowSet からレコードを取得したいと考えています。for ループのラムダ式は ArrayList を返します。必要なのは、これらの ArrayLists の値を新しい CachedRowSet (または JoinRowSet) に追加することです。ラムダ式で他の戻り値の型を試しましたが、さらに多くの問題があります。

私の JoinRowSet は、ラムダ式で使用されるコレクションに変換する必要があり、コレクションの各レコードは、異なるアプリで使用されるため、アプリ固有のクラスを持つことができないため、タイプ Row を持つ必要があります。

これに関するご意見をいただければ幸いです。ありがとうございました。

これは私のコードです:

List dataList = new ArrayList();

Collection<Row> filteredDataArr = (Collection<Row>) jrs.toCollection();

for (Map.Entry<String,Integer> entry : finalTM.entrySet()) {

    String key = entry.getKey();

    dataList = filteredDataArr.stream() 
            .filter(u -> {
                            try {
                                return ((u.getColumnObject(thisColIdxToGroupBy).toString()).equals(key));
                            } catch (Exception e) {
                                e.printStackTrace();
                                return false;
                            }
                        }
                    )
            .collect(Collectors.toList())
            ;
    System.out.println("#recs: " + dataList.size());
}

更新: ArrayList をループし、CachedRowSet の insertRow メソッドを使用して、これを行う方法を見つけました。ただし、これが最も効率的な方法であるかどうかはわかりません。

CachedRowSet finalCRS = new CachedRowSetImpl();
finalCRS.setMetaData((RowSetMetaData) jrs.toCachedRowSet().getMetaData());
if (dataList != null && dataList.size() > 0) {

    for (Object rec : dataList) {
        finalCRS.moveToInsertRow();

        for (int j = 1; j <= finalCRS.getMetaData().getColumnCount(); j++) {

            String dataType = finalCRS.getMetaData().getColumnTypeName(j);

            if (dataType.equals("NUMBER")) {
                finalCRS.updateBigDecimal(j, (BigDecimal) ((Row)rec).getColumnObject(j));

            } else if (dataType.equals("VARCHAR2")) {
                finalCRS.updateString(j, (String) ((Row)rec).getColumnObject(j));

            } else if (dataType.equals("DATE")) {
                finalCRS.updateTimestamp(j, (Timestamp) ((Row)rec).getColumnObject(j));
            }
        }
        finalCRS.insertRow();
        finalCRS.moveToCurrentRow();

    }
}
4

0 に答える 0