gpt4 book ai didi

java - 基于一列数据对 ArrayList() 进行聚类的更简洁的方法是什么?

转载 作者:行者123 更新时间:2023-11-29 06:26:20 24 4
gpt4 key购买 nike

假设我有一个下面的列表

 full_list

ID NAME
1 Apple
1 Banana
2 Carrot
1 Mango
2 Spinach
3 BMW
3 Opal

对于这个单一列表,我想创建一个基于列 ID 的分组列表如下图

 fruits_list              veggies_list               cars_list
ID NAME ID NAME ID NAME
1 Apple 2 Carrot 3 BMW
1 Banana 2 Spinach 3 Opal
1 Mango

我试图用 Arraylist<ArrayList<CustomObject>> 做到这一点.但它增加了代码的复杂性。我做错了吗?有没有更简洁的方法来做到这一点?

PS:数据传入不固定。我无法用条件明确定义列表(即 if(id==1)、if(id==2) 等)。这应根据传入数据动态完成。

最佳答案

正如您所说,如果您使用列表来执行此操作,将会更加复杂。这个逻辑可以通过使用 Map 和 List 来简化。使用 Map 和 List 实现此目的的示例代码如下

Map<Integer, List<String>> myMap = new LinkedHashMap<Integer, List<String>>();
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/stackoverflow?useSSL=false",
"root", "password");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select * from `58144029`");
while (rs.next()) {
List<String> myList = myMap.get(rs.getInt("id")) == null ? new LinkedList<String>()
: myMap.get(rs.getInt("id"));
myList.add(rs.getString("name"));
myMap.put(rs.getInt("id"), myList);
}
con.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(myMap);
// Getting the List as per id
System.out.println(myMap.get(1));

在上面的代码中,我在数据库中创建了与您相同的表。数据现在动态添加到 map 中。无论您在数据库中拥有什么 id,都将成为 map 的键,而针对该 id 的值将成为值列表。键可以是任何整数,您可以将它们进一步映射到特定列表。

创建表和插入数据的查询如下

CREATE TABLE `58144029` (
`id` int(11) NOT NULL,
`name` varchar(64) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `58144029` (`id`, `name`) VALUES
(1, 'Apple'),
(1, 'Banana'),
(2, 'Carrot'),
(1, 'Mango'),
(2, 'Spinach'),
(3, 'BMW'),
(3, 'Opal');

关于java - 基于一列数据对 ArrayList() 进行聚类的更简洁的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58144029/

24 4 0