我HtmlUnit用来获取HtmlTable. 我正在尝试获取每列的单元格列表。到目前为止,在我尝试过的代码中,我可以找到第一列。如何遍历每一列并在其中运行一些代码?我想确保它们都按字母顺序排序,但我只需要弄清楚该代码的放置位置。编辑:我找到了答案。我想我的问题措辞错误。我需要获取每一列并将它们放入自己的集合中。在原始示例中,我只显示了 column1。但我需要每列(基于每行中有多少个单元格)。下面是一些有效的代码。但它可能能够更好地优化。HtmlPage htmlPage = webClient.getPage("http://localhost:8080/myurl"); HtmlTable myTable = htmlPage.getHtmlElementById("mytable"); // find the number of columns by grabbing the first row and returning the number // of cells within the first row int numberOfColumns = myTable.getRows().stream().map(row -> row.getCells()).findFirst().get() .size(); // initialize columns List<List<String>> columns = new ArrayList<List<String>>(numberOfColumns); // initialize new arraylists for each column based upon the number of columns for (int i = 0; i < numberOfColumns; i++) columns.add(new ArrayList<>()); // iterate through each column for (int columnIndex = 0; columnIndex < numberOfColumns; columnIndex++) { // iterate through each row for (int rowIndex = 0; rowIndex < myTable.getRows().size(); rowIndex++) { String asText = myTable.getCellAt(rowIndex, columnIndex).asText(); columns.get(columnIndex).add(asText); } } //iterate through the columns and do stuff! columns.forEach(a -> { //do stuff to the column such as verify it was sorted, or sort it yourself etc System.out.println("column" + a.toString()); a.forEach(b -> { //do stuff LOG.info(b); }); });
3 回答
MYYA
TA贡献1868条经验 获得超4个赞
您可以将其作为单个流加入的一部分:
webClient.getPage("http://localhost:8080/myUrl") .getHtmlElementById("myTable") .getRows() .stream() .map(row -> row.getCells().stream().findFirst().get().asText()) .sort((o1, o2) -> o1.compareTo(o2)) // make alphabetical .collect(Collectors.joining("|"));
侃侃无极
TA贡献2051条经验 获得超10个赞
你可以把它收集到一个List
的List
:
List<List<HtmlTableCell>> columns = myTable.getRows() .stream() .map(row -> row.getCells() .stream() .collect(Collectors.toList()) .collect(Collectors.toList());
然后当你需要登录时:
LOG.info(columns.stream() .flatMap(List::stream) .map(m -> m.asText()) .sorted() //Sort the list .collect(Collectors.joining("|")));
料青山看我应如是
TA贡献1772条经验 获得超8个赞
如果您想将表格作为列表列表(List<List<HtmlTableCell>>
),这将做到
List<List<HtmlTableCell>> table = myTable.getRows().stream() .map(row -> row.getCells().stream().collect(Collectors.toList()) .collect(Collectors.toList());
或者,如果您不需要List
后者,您可以跳过收集来列出并执行您的代码
List<List<HtmlTableCell>> table = myTable.getRows().stream() .map(row -> row.getCells().stream().collect(Collectors.toList()) .forEachOrdered(cellList -> System.out.println(cellList));
添加回答
举报
0/150
提交
取消