我想将流收集到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/