我在将元素分离到Java中的不同列表时遇到问题。问题实际上是我需要不确定数量的新列表。例如,我有一个方法,它返回一个包含一些对象的列表,但如果我在该列表中有50个元素,我想将它们拆分为小列表。对于50个元素,我需要10个新列表来将这些元素放入其中,但如果该数字将增加到100,我将需要20个新列表。有没有办法说如果需要,Java会自动为我生成一个新列表?
答案 0 :(得分:1)
听起来你想要的是通常所谓的“分组”操作。要采用简化示例(来自注释),您有一堆Customer
个对象,并且您希望将它们分组到按City
分类的单独列表中。 (你真正的问题可能比这更复杂,但暂时让我用City
例子来运行。)
要拥有任意数量的列表,组织它们的便捷方法是创建Map<City, List<Customer>>
。也就是说,您有一张地图,其关键字为City
,其值为List
个来自Customer
的{{1}}个对象。
编写一个贯穿输入City
的普通循环并将它们存储到List<Customer>
中是相当简单的,如上所述。一个小皱纹是你必须处理创建Map
并在第一次遇到来自List
Map
的{{1}}时将其放入Customer
之前。这是代码:
City
在Java 8中,您可以使用新方法List<Customer> inputList = ...;
Map<City, List<Customer>> map = new HashMap<>();
for (Customer cust : inputList) {
City city = cust.getCity();
List<Customer> custList = map.get(city);
if (custList == null) {
custList = new ArrayList<>();
map.put(city, custList);
}
custList.add(cust);
}
来处理为城市中第一位客户创建列表的特殊情况,从而节省一些麻烦:
Map.computeIfAbsent()
但是如果您使用的是Java 8,那么您也可以使用Streams API,它具有Map<City, List<Customer>> map = new HashMap<>();
for (Customer cust : inputList) {
City city = cust.getCity();
map.computeIfAbsent(city, k -> new ArrayList<>());
map.get(city).add(cust);
}
类,可以非常方便地进行这种分组:
Collectors