【发布时间】:2017-07-14 18:23:48
【问题描述】:
你能帮我用 ArrayList 中的对象构造 Hashmap。
public class Store {
private int storeId;
private String storeName;
private int deliveryDays;
private List<String> servingZipCodes;
private StoreAddress storeAddress;
public Store() {
}
public Store(int storeId,String storeName,int deliveryDays,List<String> servingZipCodes,StoreAddress storeAddress){
this.storeId = storeId;
this.storeName=storeName;
this.deliveryDays=deliveryDays;
this.servingZipCodes=servingZipCodes;
this.storeAddress = storeAddress;
}
//getters and setters.
}
还有 StoreAddress 类
public class StoreAddress {
private String streetAddress1;
private String streetAddress2;
private String streetAddress3;
private String city;
private String state;
private String postalCode;
private String country;
private String phone;
public StoreAddress() {
}
public StoreAddress(String streetAddress1, String streetAddress2, String streetAddress3, String city, String state, String postalCode, String country, String phone) {
this.streetAddress1 = streetAddress1;
this.streetAddress2 = streetAddress2;
this.streetAddress3 = streetAddress3;
this.city = city;
this.state = state;
this.postalCode = postalCode;
this.country = country;
this.phone = phone;
}
这是用于测试的 Test 类。
public class Test {
public static void main(String args[]){
List<Store> storeList=new ArrayList();
StoreAddress storeAddress1 = new StoreAddress("1500 Polaris Pkwy",null,null,"Columbus","OH","43240","US","9165452345");
StoreAddress storeAddress2 = new StoreAddress("160 Easton Town Center",null,null,"Columbus","OH","43240","US","9165452345");
storeList.add(new Store(1,"Store 1",7,new ArrayList<String>(Arrays.asList("43240","43241","43242")),storeAddress1));
storeList.add(new Store(2,"Store 2",7,new ArrayList<String>(Arrays.asList("43240","43082","43081")),storeAddress2));
Map<String,List<Store>> zipCodeStoreList = null;
storeList.forEach(store -> {
List<String> servingZipCodes = store.getServingZipCodes();
servingZipCodes.stream().filter(x -> x.matches(store.getStoreAddress().getPostalCode().substring(0,5))).map(x ->new HashMap<String, Object>(){{
put(x, store);
}});
});
虽然它在 Java 7 中是可能的,但在 Java 8 中寻找解决方案。
Key: 43240, value: Store1 , Store2
Key: 43241, value: null
Key: 43242, value: null
Key: 43082, value: null
Key: 43081, value: null
【问题讨论】:
-
这个地图的键集应该是每个提供的邮政编码,每个值应该是提供该邮政编码的商店列表?
-
是的,我要找的就是这个
-
一开始你应该知道你在做什么,而不是怎么做。确实,你必须找出
Stores之间的zipCodes的交集,然后在zipCodes的交集的基础上构建Map。 -
谢谢!!让我们试试吧
-
必须是HashMap吗?
标签: java lambda java-8 java-stream