Java8 Lambda和Streams:<lambda parameter =“”>而不是必需的

时间:2018-09-20 20:10:11

标签: lambda java-8 apache-poi

我发现使用Java8 + Apache.POI造成了误解:

  1. 我有一个列表(itemList)
  2. 拥有工作表(sheet)并转换为行流
  3. 通过以下方式过滤行:布尔函数(行,整数)(checkSap(row, importProperties.getSapIndex())
  4. 每个行通过:List.add(ListElement function(Row,ImpProp)itemList.add(rowToItem(row2, impProp)
  5. 错误:无法解析forEach(的方法,并突出显示了row2

你知道我该怎么解决吗?


一段代码:

    List<Item> itemList = new ArrayList<>();
    StreamSupport.stream(sheet.spliterator(), false)
            .filter(row -> checkSap(row, importProperties.getSapIndex())
            .forEach(row2 -> {
                itemList.add(rowToItem(row2, impProp));
            });

RowToItem函数:

private Item rowToItem(XSSFRow row, ImportProperties importProperties) {
    Item item = new Item();
    item.setSap(getString(row, importProperties.getSapIndex()));
    return item;
}

ImpProp类:

public class ImpProp{
    private String sapText;
    private Integer sapIndex;

    public boolean findSap(Row row) {
        Optional<Integer> optionalIndex = StreamSupport.stream(row.spliterator(), false)
            .filter(cell -> ((cell.getCellType() == Cell.CELL_TYPE_STRING)
                    && (cell.getStringCellValue().trim().equalsIgnoreCase(sapText.trim()))))
            .findAny()
            .map(cell -> cell.getColumnIndex());

        if (optionalIndex.getClass().isInstance(Integer.class)) {
            sapIndex = optionalIndex.get();
            return true;
        }
        return false;
    }

    public Integer getSapIndex() {
        return sapIndex;
    }
}

1 个答案:

答案 0 :(得分:3)

您不缺少右括号吗?根据您的代码,您知道。

StreamSupport.stream(sheet.spliterator(), false)
        .filter(row -> checkSap(row, importProperties.getSapIndex()))
        .forEach(row2 -> {
            itemList.add(rowToItem(row2, impProp));
        });

在带有filter的行上应该有三个右括号。否则,forEach方法将应用于checkSap方法的结果。