Java 从表中获取数据并存储在hashmap中

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

我有一个有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.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是正确的,您只需迭代并将值添加到哈希映射中,并在必要时添加新的键(如果键不存在)没什么,没什么,你能详细解释一下吗?