我在Streams中使用Grouping-By:
1:我想知道如何使用" Grouping-By"收集方法两次。
2:其次,在分组中定义返回类型的策略是什么?
1:
Map<String,String> sum1 = Items.items().stream()
.collect(Collectors.groupingBy(Items::getName,
Collectors.groupingBy(Items::getName)));
错误消息:
1:线程中的异常&#34; main&#34; java.lang.RuntimeException:无法编译 源代码 - 不兼容的类型:推理变量D有 不兼容的等式约束java.lang.String,java.lang.Integer at collectorsinjava.CollectorsInJava.main(CollectorsInJava.java:33)
2:
Map<String, Map<String,Integer>> sum1 = Items.items().stream()
.collect(Collectors.groupingBy(Items::getName,
Collectors.groupingBy(Items::getQuantity)));
错误消息:
2:线程&#34; main&#34;中的异常java.lang.RuntimeException:无法编译 源代码 - 不兼容的类型:推理变量K有 不兼容的边界等式约束:java.lang.String更低 bounds:java.lang.Integer at collectorsinjava.CollectorsInJava.main(CollectorsInJava.java:37)
这是我的项目清单:
List<Items> item = Arrays.asList(new Items("A",22,new BigDecimal("23.3")),
new Items("B",33,new BigDecimal("19.99")),
new Items("C",31,new BigDecimal("23.3")),
new Items("D",22,new BigDecimal("19.99")),
new Items("B",33,new BigDecimal("23.3")),
new Items("C",31,new BigDecimal("19.99")),
new Items("D",22,new BigDecimal("23.3"))
);
有人可以建议我如何避免编译错误吗?
答案 0 :(得分:1)
您可以通过链接 groupingBy 收藏家来分组两次或多次,但问题是接收器类型不正确。
第一个查询的接收器类型应为:
#import
from selenium.webdriver.common.action_chains import ActionChains
#code block
menu = driver.find_element_by_xpath("//a[@class='incident-action']/i[@class='icon-ellipsis-h']")
ActionChains(driver).move_to_element(menu).perform()
driver.find_element_by_xpath("//div[@class='action-list' and @id='header-actions-list']//a[@class='icon-arrow' and contains(text(),'Solution')]").click()
因为不需要对同一属性进行两次分组。
当您将两个或多个分组收集器链接在一起时,您将收到多级映射,因此第二个查询的接收器类型应为:
Map<String, List<Items>> resultSet = Items.items().stream()
.collect(Collectors.groupingBy(Items::getName));
否则,如果您想调整收藏家以执行额外的整理转换,那么您需要寻找collectingAndThen。