我想将流收集到Map中,其中的键已排序,所以我尝试了:

TreeMap<LocalDate, MenuChart2.Statistics> last3MPerDay =

                menuPriceByDayService.findAllOrderByUpdateDate(menu, DateUtils.quarterlyDate(), 92)
                .stream()
                .sorted(comparing(MenuPriceByDay::getUpdateDate))
                .collect(Collectors
                        .toMap(MenuPriceByDay::getUpdateLocalDate, p -> new MenuChart2().new Statistics( p.getMinPrice().doubleValue(),


但是我遇到了编译错误

Type mismatch: cannot convert from Map<LocalDate,Object> to
 TreeMap<LocalDate,MenuChart2.Statistics>

最佳答案

如果将数据存储在诸如TreeMap之类的已排序映射中,则无需创建流的.sorted()版本。收集器自然会将数据存储在TreeMap中,并对数据进行排序。

您的.collect()调用必须返回TreeMap才能将结果分配给TreeMap,因此Collectors.toMap()必须接受为收集器创建TreeMap的供应商,以允许传播所需的类型。

例如)

jshell> String[] data = { "apple", "pear", "orange", "cherry" };
data ==> String[4] { "apple", "pear", "orange", "cherry" }

jshell> var map = Arrays.stream(data)
   ...>                 .collect(Collectors.toMap(s -> s,
   ...>                                           s -> s.length(),
   ...>                                           (a,b) -> a,
   ...>                                           TreeMap::new));
map ==> {apple=5, cherry=6, orange=6, pear=4}


结果TreeMap显示数据按键排序。

关于java - Java8:按键将流收集到SortedMap中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55250107/

10-12 04:54