【问题标题】:Group Objects by Common Key按公共键分组对象
【发布时间】:2010-04-07 14:49:41
【问题描述】:

我有一个客户列表。每个客户都有一个地址,有些客户实际上可能有相同的地址。我的最终目标是根据客户的地址对客户进行分组。我想我可以将客户放在某种基于列表的结构中并对地址进行排序,或者我可以将对象放入某种允许每个键有多个值的映射中。

我现在要拍一张漂亮的照片:

List:
A1 - C1, A1 - C2, A2 - C3, A3 - C4, A3 - C5

Map:
A1 A2 A3
C1 C3 C4
C2    C5

您认为哪个选项(或任何其他选项)是最佳解决方案?是否有任何现有的类可以使开发更容易?

【问题讨论】:

    标签: java list map


    【解决方案1】:

    您可以为此使用Map<K, Collection<V>>,其中K 是地址,V 是客户。另一种选择是Google Collections Multimap<K, V>,它是Map<K, Collection<V>> 的更方便的包装器。

    【讨论】:

      【解决方案2】:

      您可以使用 Lambdaj 的 group 方法完成此操作。像这样的:

      Group<Customer> custByAddr = group(customers, by(on(Customer.class).getAddress().getId())
      

      然后,您可以通过调用custByAddr.find("addressId1") 来按组获取客户列表

      在分组项目部分的http://code.google.com/p/lambdaj/wiki/LambdajFeatures 上阅读更多信息。

      我还没有测试过这个,但它应该给你一个起点。 LambdaJ我用过很多次,非常好用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-16
        • 2021-11-19
        • 1970-01-01
        • 2021-08-18
        • 2022-11-27
        • 1970-01-01
        相关资源
        最近更新 更多