作为此question的后续内容,我有一个java.util.ArrayList<Parcel>
和一个Parcel
对象。
public class Parcel {
/** The name. */
private String name;
/** The address. */
private String address;
/** The contact no. */
private String contactNo;
/** The postal code. */
private String postalCode;
// Accessors and mutators
}
我有一个方法可以从InputStream
返回包裹列表。
List<Parcel> parcels = parcelManager.getParcelList(inputStream);
@Test
public void testParcelBeanReturnCount() {
Assert.assertEquals(13, tester.getParcelList(inputStream)); // works fine.
}
现在,如何列出前N个邮政编码以及交付的包裹数量(到特定的邮政编码)?我尝试使用Guava的Multiset
API。
Multiset<Parcel> postalCodeCount = HashMultiset.create(parcels);
System.out.println(postalCodeCount.size()); // 13.
答案 0 :(得分:2)
班级Parcel
需要明确定义hashCode()
和equals()
。
请参阅HashCode and Equals method in Java object
或者,您可以使用Java8:
List l = parcels.stream()
.collect(Collectors.groupingBy(p -> p.getPostalCode()))
.entrySet()
.stream()
.sorted((e1, e2) -> Integer.compare(e2.getValue().size(), e1.getValue().size()))
.limit(N) //Top N
.collect(Collectors.toList());