在Java8-Streams中进行分组

时间:2017-12-18 11:29:53

标签: java java-stream

我在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"))
);

有人可以建议我如何避免编译错误吗?

1 个答案:

答案 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