有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java基于日期范围按键过滤多重映射

我有一个包含付款交易的数据集,包括日期和金额。我将它们存储在地图数据结构中,日期作为键,数量作为值

由于每个日期可能有多次付款,我使用的是谷歌Guava图书馆的Multimap

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");

Multimap<LocalDate,BigDecimal> payments = ArrayListMultimap.create();

payments.put(LocalDate.parse("12/25/2016",formatter), new BigDecimal("1000"));
payments.put(LocalDate.parse("01/15/2017",formatter), new BigDecimal("250"));
payments.put(LocalDate.parse("01/25/2017",formatter), new BigDecimal("500"));
payments.put(LocalDate.parse("03/20/2017",formatter), new BigDecimal("500"));
payments.put(LocalDate.parse("04/15/2017",formatter), new BigDecimal("1000"));
payments.put(LocalDate.parse("06/15/2017",formatter), new BigDecimal("1000"));

根据日期范围过滤此地图的推荐方法是什么

例如,显示2017年3月2日至2017年3月31日之间的条目


共 (1) 个答案

  1. # 1 楼答案

    需要对Multimap进行排序,否则必须对其进行迭代。幸运的是,有这样一个多重地图:

    ListMultimap<LocalDate, BigDecimal> multimap =
        MultimapBuilder.treeKeys().arrayListValues().build();
    
    ... fill
    
    // This cast is safe.
    SortedMap<LocalDate, Collection<BigDecimal>> asMap =
        (SortedMap<LocalDate, Collection<BigDecimal>>) multimap.asMap();
    SortedMap<LocalDate, Collection<BigDecimal>> subMap =
        asMap.subMap(from, to);
    for (Map.Entry<LocalDate, Collection<BigDecimal>> e : subMap.entrySet()) {
        ...
    }