使用Lambda将ArrayList添加到CachedRowSet或JoinRowSet?

时间:2014-10-10 14:36:55

标签: java arraylist lambda java-8 cachedrowset

我有一个JoinRowSet(jrs)和TreeMap(finalTM)。我在TreeMap的键上有一个for循环循环,对于每个键,我想使用Java 8 lambda表达式从JoinRowSet中获取该列等于TreeMap键值的记录。 for循环上的lambda表达式返回一个ArrayList。我需要的是将这些ArrayLists的值添加到新的CachedRowSet(或JoinRowSet)。我已经在lambda表达式上尝试了其他返回类型,但我还有更多问题。

我的JoinRowSet必须转换为与lambda表达式一起使用的Collection,并且集合中的每个记录都必须具有Row类型,因为这将在不同的应用程序中使用,因此它不能具有特定于应用程序的类。 / p>

对此的任何意见都将不胜感激。谢谢。

这是我的代码:

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();

    }
}

0 个答案:

没有答案