Skip to content
Advertisement

Java + Postgresql : How to store Parent and List of all children in a HashMap>

I have an sql table Children :

| ParentName | ChildrenName |
 ———————————————————————————
| parent 1   | child 1      |
| parent 1   | child 2      |
| parent 2   | child 3      |
| parent 1   | child 4      |
| ...        | ....         |

My goal is to construct a java HashMap<String , ArrayList<String>> that contains ParentName as key and a list of ChildrenName as value.

Should I perform the processing by using an sql query? Or select all data and process it via java?

Advertisement

Answer

Concerning your second option:
Get all data from the database with a simple query and map the data in Java

You can do it like this (read the code comments):

public static void main(String[] args) {
    // provide a query as String
    String query = "SELECT ParentName, ChildName FROM some_table";
    // provide the data structure
    Map<String, List<String>> results = new HashMap<>();
    // connect to your database
    Connection connection; // this has to be created using a suitable JDBC implementation

    try (PreparedStatement ps = connection.prepareStatement(query)) {
        ResultSet rs = ps.executeQuery();

        while (rs.next()) {
            String parentName = rs.getString(1);
            String childName = rs.getString(2);

            // add them to the map
            if (results.containsKey(parentName)) {
                /* 
                 * if the key already exists in the map, 
                 * just add the current name to its value(s)
                 */
                results.get(parentName).add(childName);
            } else {
                // create a new list as the value for the new key
                List<String> childNames = new ArrayList<>();
                // add the current child name to it
                childNames.add(childName);
                // and put the new key and value in the map
                results.put(parentName, childNames);
            }
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }

    // print the results
    results.forEach((p, c) -> System.out.println(p + ": " + String.join(", ", c)));
}
User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement