Java 从表中获取数据并存储在hashmap中
我有一个有5列的表(Java 从表中获取数据并存储在hashmap中,java,postgresql,hashmap,treemap,Java,Postgresql,Hashmap,Treemap,我有一个有5列的表(id|州名|州名|地区代码|城市)。我必须将所有值存储为键值对,其中key=state\u abrevation和value=(区号)城市 HashMap<String, List<String>> data = new HashMap<>(); .. while(rs.next()) { List<String> temp = new ArrayList<>(); temp.add(rs.getSt
id
|州名
|州名
|地区代码
|城市
)。我必须将所有值存储为键值对,其中key=state\u abrevation
和value
=(区号)
城市
HashMap<String, List<String>> data = new HashMap<>();
..
while(rs.next()) {
List<String> temp = new ArrayList<>();
temp.add(rs.getString("area_code"));
temp.add(rs.getString("cities"));
data.put(rs.getString("state_abbrevation"), temp);
}
此外,州政府也有副本。示例数据如下所示:
id | state_abbrevation | state_name | area_code | cities
----+-------------------+--------------+-----------+---------------------
1 | AK | Alaska | 907 | Juneau
2 | AL | Alabama | 205 | Birmingham
3 | AL | Alabama | 251 | Mobile
4 | AL | Alabama | 256 | Huntsville
5 | AL | Alabama | 334 | Montgomery
6 | AL | Alabama | 938 | Florence/Huntsville
7 | AR | Arkansas | 479 | Ft. Smith
8 | AR | Arkansas | 501 | Little Rock
9 | AR | Arkansas | 870 | Jonesboro
10 | AZ | Arizona | 480 | Scottsdale
11 | AZ | Arizona | 520 | Tucson
12 | AZ | Arizona | 602 | Phoenix
13 | AZ | Arizona | 623 | Glendale
14 | AZ | Arizona | 928 | Flagstaff
15 | CA | California | 209 | Modesto
16 | CA | California | 213 | Los Angeles
17 | CA | California | 310 | West Hollywood
18 | CA | California | 323 | Hollywood
在key=AL&value=Area code和City for all state_abbrevation=AL的键值对中存储的最佳解决方案是什么
我想要的Hashmap示例:
键、值
AK,(907)朱诺
艾尔(205)伯明翰
(251)流动电话
(256)亨茨维尔
(938)佛罗伦萨
等等
下面是我使用Hibernate的工作代码:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
public class HibernateCriteriaExamples {
public static void main(String[] args) {
try {
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Criteria criteria = session.createCriteria(State.class);
//List<State> stateList = criteria.list();
List<String> stateAbbrevationList = criteria.setProjection(Projections.distinct(Projections.property("stateAbbrevation"))).list();
HashMap<String,List> cityAreacodeAndState = new HashMap<String,List>();
for(int i=0; i<stateAbbrevationList.size();i++)
{
String abbrevation = stateAbbrevationList.get(i);
//System.out.println(abbrevation);
Criteria criteriaareaCodeWithCity = session.createCriteria(State.class);
List<State> stateObject = criteriaareaCodeWithCity.add(Restrictions.eq("stateAbbrevation", abbrevation)).list();
List<String> formattedAreaCodeAndCity =new ArrayList<String>();
for(int j=0; j<stateObject.size();j++)
{
State state = (State)stateObject.get(j);
int a = state.getAreacode();
String b = state.getCities();
String c = "("+a+") "+b;
// System.out.println(c);
formattedAreaCodeAndCity.add(c);
}
cityAreacodeAndState.put(abbrevation, formattedAreaCodeAndCity);
}
System.out.println("---------------PRINTING REQUIRED DATA------------------");
for (HashMap.Entry<String,List> formattedAreaCodeAndCity1 : cityAreacodeAndState.entrySet())
{
System.out.println(formattedAreaCodeAndCity1.getKey() + "," + formattedAreaCodeAndCity1.getValue());
}
tx.commit();
sessionFactory.close();
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
import java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入org.hibernate.Criteria;
导入org.hibernate.hibernateeexception;
导入org.hibernate.Session;
导入org.hibernate.SessionFactory;
导入org.hibernate.Transaction;
导入org.hibernate.criteria.Projections;
导入org.hibernate.criteria.Restrictions;
公共类HibernateCriteria示例{
公共静态void main(字符串[]args){
试一试{
SessionFactory SessionFactory=HibernateUtil.getSessionFactory();
Session Session=sessionFactory.openSession();
事务tx=会话.beginTransaction();
条件=session.createCriteria(State.class);
//List stateList=criteria.List();
List stateAbRevationList=criteria.setProjection(Projections.distinct(Projections.property(“stateAbRevations”)).List();
HashMap cityreacodeandstate=新HashMap();
对于(int i=0;i您可以使用HashMap
以及List
您的HashMap
键将是state\u abrevation
,您的值(即List
)将包含area\u code
和cities
HashMap<String, List<String>> data = new HashMap<>();
..
while(rs.next()) {
List<String> temp = new ArrayList<>();
temp.add(rs.getString("area_code"));
temp.add(rs.getString("cities"));
data.put(rs.getString("state_abbrevation"), temp);
}
如注释中所述,您可以使用value对象来保存状态的数据:
public Map<String, State> getStatesMap() {
... execute query and get resultSet
Map<String, State> result = new HashMap<>();
while (resultSet.next()) {
result.put(
resultSet.getString("state_abbrevation"),
new State(
resultSet.getString("area_code"),
resultSet.getString("cities")
)
);
}
return result;
}
private class State {
private final String area;
private final String cities;
public State(String area, String cities) {
this.area = area;
this.cities = cities;
}
public String getArea() {
return area;
}
public String getCities() {
return cities;
}
}
publicmap getStatesMap(){
…执行查询并获取结果集
映射结果=新的HashMap();
while(resultSet.next()){
结果(
resultSet.getString(“state_abbrevation”),
新国家(
resultSet.getString(“区域代码”),
resultSet.getString(“城市”)
)
);
}
返回结果;
}
私有阶级国家{
私人最终串区;
私人城市;
公共州(字符串区域、字符串城市){
这个面积=面积;
这个。城市=城市;
}
公共字符串getArea(){
返回区;
}
公共字符串getCities(){
回归城市;
}
}
创建一个HashMap
,迭代结果,将数据添加到HashMap中。你到底有什么问题?你得到了什么错误?你的代码是什么样子的?为什么不使用VO并根据Id或根据“state_abrevation”的要求将该VO放入HashMap中。通过这种方式,您将存储所有值,并且可以轻松检索。但是,如果您希望将所有其他列作为值存储在一行的映射中,请检查此链接[@a_horse_with_no_name是正确的,您只需迭代并将值添加到哈希映射中,并在必要时添加新的键(如果键不存在)没什么,没什么,你能详细解释一下吗?