用java写一个map数据汇总
时间: 2023-04-06 09:03:50 浏览: 72
好的,我可以回答这个问题。使用Java编写一个Map数据汇总可以通过以下步骤实现:
1. 创建一个Map对象,例如:Map<String, Integer> map = new HashMap<>();
2. 遍历需要汇总的数据,将数据作为key,出现次数作为value存入Map中,例如:
for (String data : dataList) {
if (map.containsKey(data)) {
map.put(data, map.get(data) + 1);
} else {
map.put(data, 1);
}
}
3. 最后,可以遍历Map对象,输出每个数据出现的次数,例如:
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + "出现了" + entry.getValue() + "次");
}
希望这个回答对你有所帮助。
相关问题
java怎么用多线程查询数据库进行数据汇总
在Java中使用多线程查询数据库进行数据汇总,可以采用以下步骤:
1. 导入相关的库,如 java.sql、java.util.concurrent。
2. 创建一个数据库连接池,用于多线程共享数据库连接。
3. 定义一个查询任务类,该类实现 Runnable 接口,用于执行查询并将查询结果保存到共享的数据结构中。
4. 创建多个查询任务对象,并将它们添加到线程池中。
5. 等待所有查询任务完成,并汇总结果。
以下是一个简单的示例代码:
```java
import java.sql.*;
import java.util.concurrent.*;
public class Main {
// 创建数据库连接池
static BlockingQueue<Connection> dbPool = new ArrayBlockingQueue<>(10);
static {
try {
for (int i = 0; i < 10; i++) {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
dbPool.put(conn);
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 定义查询任务类
static class QueryTask implements Runnable {
String queryStr;
ConcurrentMap<String, Integer> resultMap;
public QueryTask(String queryStr, ConcurrentMap<String, Integer> resultMap) {
this.queryStr = queryStr;
this.resultMap = resultMap;
}
@Override
public void run() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 从连接池中获取连接
conn = dbPool.take();
stmt = conn.createStatement();
rs = stmt.executeQuery(queryStr);
// 处理查询结果
while (rs.next()) {
String key = rs.getString("key");
int value = rs.getInt("value");
resultMap.merge(key, value, Integer::sum);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) dbPool.put(conn);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) throws Exception {
// 创建多个查询任务
String[] queries = {"SELECT * FROM table1", "SELECT * FROM table2", "SELECT * FROM table3"};
ConcurrentMap<String, Integer> resultMap = new ConcurrentHashMap<>();
ExecutorService executor = Executors.newFixedThreadPool(10);
for (String queryStr : queries) {
QueryTask task = new QueryTask(queryStr, resultMap);
executor.execute(task);
}
// 等待所有查询任务完成
executor.shutdown();
executor.awaitTermination(1, TimeUnit.MINUTES);
// 汇总结果
for (String key : resultMap.keySet()) {
int value = resultMap.get(key);
System.out.println(key + ": " + value);
}
}
}
```
在这个示例代码中,我们使用了一个 ConcurrentMap 对象来保存查询结果,它是一个线程安全的哈希表,可以在多线程环境下进行并发访问。在每个查询任务中,我们从数据库连接池中获取一个数据库连接,执行查询,并将查询结果保存到 ConcurrentMap 对象中。最后,我们使用 ExecutorService 线程池来执行查询任务,并等待所有任务完成后汇总结果。
Java数据统计将二三级数据汇总到一级
您可以使用Java编写程序来将二三级数据汇总到一级,具体步骤如下:
1. 定义一个三级数据结构,如Map<String,Map<String,List<Integer>>>,其中第一层Map的Key表示一级数据,第二层Map的Key表示二级数据,List则保存了对应的三级数据;
2. 读取二三级数据,遍历每一个数据项,将其按照一级、二级分类,放入对应的Map中;
3. 遍历Map,将每一个一级数据对应的Map中的所有List合并成一个List,得到所有三级数据的汇总,保存到一个新的Map中,其中Key为对应的一级数据。
以下是示例代码:
```
Map<String,Map<String,List<Integer>>> data = new HashMap<>();
// 读取二三级数据
// ...
// 汇总数据
Map<String,List<Integer>> result = new HashMap<>();
for (Map.Entry<String,Map<String,List<Integer>>> entry1 : data.entrySet()) {
String key1 = entry1.getKey();
Map<String,List<Integer>> map2 = entry1.getValue();
List<Integer> list3 = new ArrayList<>();
for (Map.Entry<String,List<Integer>> entry2 : map2.entrySet()) {
List<Integer> list = entry2.getValue();
list3.addAll(list);
}
result.put(key1, list3);
}
```
请注意,以上代码仅为示例,具体实现可能会因为数据结构的不同而有所不同。