After a bit of pain I've worked it out and hopefully this will be useful to others as well
You mustn't use HashMap or ArrayList - just use the interfaces Map and List, code should read:
Map<Date, List<Trade>> groupTrades = allTrades.stream().collect(Collectors.groupingBy(Trade::getTradeDate));
Note that this rather generic message could be caused when any of the parameters in the groupingBy don't match what is expected in the declaration of the Map.