Java 从sql数据库中获取属性值作为hashmap中的用户定义对象 公共类仪表板{ int请求_ID、价格、已处理; 字符串登录用户; public int getREQUEST_ID(){ 返回请求\u ID; } public void setREQUEST_ID(int rEQUEST_ID){ 请求\u ID=请求\u ID; } //所有的能手和二传手 公共类数据库连接{ 公共ArrayList getStoreResult(){ ArrayList dashRec; 试一试{ 类.forName(“”); Connection con=DriverManager.getConnection(“”); 语句st=con.createStatement(); 结果集rs=st.executeQuery(“”); HashMap=newHashMap(); while(rs.next()){ 整数id=rs.getInt(1); 如果(!map.containsKey(id)){ dashRec=newarraylist(); map.put(id,dashRec); } 仪表板仪表板=新仪表板(); 破折号设置请求_ID(ID); dash.setLOGIN_用户(rs.getString(2)); 破折号设定价格(rs.getInt(3)); dash.setPROCESSED(rs.getInt(4)); map.get(id).add(破折号); } } } }

Java 从sql数据库中获取属性值作为hashmap中的用户定义对象 公共类仪表板{ int请求_ID、价格、已处理; 字符串登录用户; public int getREQUEST_ID(){ 返回请求\u ID; } public void setREQUEST_ID(int rEQUEST_ID){ 请求\u ID=请求\u ID; } //所有的能手和二传手 公共类数据库连接{ 公共ArrayList getStoreResult(){ ArrayList dashRec; 试一试{ 类.forName(“”); Connection con=DriverManager.getConnection(“”); 语句st=con.createStatement(); 结果集rs=st.executeQuery(“”); HashMap=newHashMap(); while(rs.next()){ 整数id=rs.getInt(1); 如果(!map.containsKey(id)){ dashRec=newarraylist(); map.put(id,dashRec); } 仪表板仪表板=新仪表板(); 破折号设置请求_ID(ID); dash.setLOGIN_用户(rs.getString(2)); 破折号设定价格(rs.getInt(3)); dash.setPROCESSED(rs.getInt(4)); map.get(id).add(破折号); } } } },java,sql,object,arraylist,hashmap,Java,Sql,Object,Arraylist,Hashmap,我想在上面的hashmap中添加名称和状态作为用户定义的对象。对于前3组行,名称必须像A,对于下2组行,名称必须像一样。我想插入的状态必须是相同ID的行集合中的最低数字。也就是说,对于ID 123,我们需要状态1作为对象插入hashmap,对于ID 456,我们需要状态2.H怎么办 你可以像这样在while循环之后在地图上循环 检查列表大小是否为3、2或1 根据your post查询,共有3行、2行和1行,我想 行为3时,状态从1到3 当行为2时,状态从2变为3 第1行时的状态1 基于此,我写了

我想在上面的hashmap中添加名称和状态作为用户定义的对象。对于前3组行,名称必须像A,对于下2组行,名称必须像一样。我想插入的状态必须是相同ID的行集合中的最低数字。也就是说,对于ID 123,我们需要状态1作为对象插入hashmap,对于ID 456,我们需要状态2.H怎么办


你可以像这样在while循环之后在地图上循环

检查列表大小是否为3、2或1

根据your post查询,共有3行、2行和1行,我想

行为3时,状态从1到3 当行为2时,状态从2变为3 第1行时的状态1

基于此,我写了一个条件来检查:

尺寸列表:3->(3-3)+1=2

尺寸列表:2->(3-2)+1=2

尺寸列表:1->(3-1)+1=3

原子整数

因为我在
Foreach
中使用
Stream
循环查看
仪表板列表
要访问此方法之外的任何变量,请将其标记为final。
所以我添加了AtomicInteger的对象

更多信息

//创建另一个包含每个id的最低状态的映射
Map lowestStatus=newhashmap();
for(整数键:map.keySet()){
//获取与该id相关的列表的大小
int size=map.get(key.size();
int状态=(3-大小)+1;
最终AtomicInteger状态计数器=新的AtomicInteger(状态);
如果(状态!=3){
map.get(键).forEach(仪表板->{
如果(!lowerstatus.containsKey(键))
lowestStatus.put(key,statusCounter.get());
dashboard.setStatus(statusCounter.getAndIncrement());
});
}否则{
Dashboard Dashboard=map.get(键).get(0);
仪表板。设置状态(1);
最低状态。输入(键,1);
}
}
,另一版本

现状

当必须使用该id时,保持跟踪最后状态

最低地位

将第一个匹配项保存到具有给定id的给定行集合将取1值

        // create another map contains the lowest status for each id
        Map<Integer, Integer> lowestStatus = new HashMap<>();
        for (Integer key : map.keySet()) {

            // get the size of the list related to that id
            int size = map.get(key).size();
            int status = (3 - size) + 1;
            final AtomicInteger statusCounter = new AtomicInteger(status);

            if (status != 3) {
                map.get(key).forEach(dashboard -> {
                    if (!lowestStatus.containsKey(key))
                        lowestStatus.put(key, statusCounter.get());

                    dashboard.setStatus(statusCounter.getAndIncrement());
                });

            } else {
                Dashboard dashboard = map.get(key).get(0);
                dashboard.setStatus(1);
                lowestStatus.put(key, 1);
            }
        }
Map Map=newhashmap();
Map lowestStatus=newhashmap();
Map currentStatus=newhashmap();
while(rs.next()){
整数id=rs.getInt(1);
如果(!map.containsKey(id)){
put(id,newarraylist());
currentStatus.put(id,0);
最低状态。放置(id,1);
}
仪表板仪表板=新仪表板();
dash.setRequestId(id);
dash.setLoginUser(rs.getString(2));
破折号设定价格(rs.getInt(3));
dash.setProcessed(rs.getInt(4));
dash.setStatus(currentStatus.get(id)+1);
currentStatus.put(id,currentStatus.get(id)+1);//为下一次迭代更新状态
map.get(id).add(破折号);
}

你可以像这样在while循环之后在地图上循环

检查列表大小是否为3、2或1

根据your post查询,共有3行、2行和1行,我想

行为3时,状态从1到3 当行为2时,状态从2变为3 第1行时的状态1

基于此,我写了一个条件来检查:

尺寸列表:3->(3-3)+1=2

尺寸列表:2->(3-2)+1=2

尺寸列表:1->(3-1)+1=3

原子整数

因为我在
Foreach
中使用
Stream
循环查看
仪表板列表
要访问此方法之外的任何变量,请将其标记为final。
所以我添加了AtomicInteger的对象

更多信息

//创建另一个包含每个id的最低状态的映射
Map lowestStatus=newhashmap();
for(整数键:map.keySet()){
//获取与该id相关的列表的大小
int size=map.get(key.size();
int状态=(3-大小)+1;
最终AtomicInteger状态计数器=新的AtomicInteger(状态);
如果(状态!=3){
map.get(键).forEach(仪表板->{
如果(!lowerstatus.containsKey(键))
lowestStatus.put(key,statusCounter.get());
dashboard.setStatus(statusCounter.getAndIncrement());
});
}否则{
Dashboard Dashboard=map.get(键).get(0);
仪表板。设置状态(1);
最低状态。输入(键,1);
}
}
,另一版本

现状

当必须使用该id时,保持跟踪最后状态

最低地位

将第一个匹配项保存到具有给定id的给定行集合将取1值

        // create another map contains the lowest status for each id
        Map<Integer, Integer> lowestStatus = new HashMap<>();
        for (Integer key : map.keySet()) {

            // get the size of the list related to that id
            int size = map.get(key).size();
            int status = (3 - size) + 1;
            final AtomicInteger statusCounter = new AtomicInteger(status);

            if (status != 3) {
                map.get(key).forEach(dashboard -> {
                    if (!lowestStatus.containsKey(key))
                        lowestStatus.put(key, statusCounter.get());

                    dashboard.setStatus(statusCounter.getAndIncrement());
                });

            } else {
                Dashboard dashboard = map.get(key).get(0);
                dashboard.setStatus(1);
                lowestStatus.put(key, 1);
            }
        }
Map Map=newhashmap();
Map lowestStatus=newhashmap();
Map currentStatus=newhashmap();
        Map<Integer, List<Dashboard>> map = new HashMap<>();
        Map<Integer, Integer> lowestStatus = new HashMap<>();
        Map<Integer, Integer> currentStatus = new HashMap<>();

        while (rs.next()) {
            Integer id = rs.getInt(1);
            if (!map.containsKey(id)) {
                map.put(id, new ArrayList<Dashboard>());
                currentStatus.put(id, 0);
                lowestStatus.put(id, 1);
            }
            Dashboard dash = new Dashboard();
            dash.setRequestId(id);
            dash.setLoginUser(rs.getString(2));
            dash.setPrice(rs.getInt(3));
            dash.setProcessed(rs.getInt(4));
            dash.setStatus(currentStatus.get(id) + 1);
            currentStatus.put(id, currentStatus.get(id) + 1); // update the status for the next iteration
            map.get(id).add(dash);
        }
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;

class Dashboard {
    private int requestId, price, processed;
    String loginUser;

    public Dashboard(int requestId, String loginUser, int price, int processed) {
        this.requestId = requestId;
        this.price = price;
        this.processed = processed;
        this.loginUser = loginUser;
    }

    public int getRequestId() {
        return requestId;
    }

    public int getPrice() {
        return price;
    }

    public int getProcessed() {
        return processed;
    }

    public String getLoginUser() {
        return loginUser;
    }

    @Override
    public String toString() {
        return requestId + "\t" + price + "\t" + processed + "\t" + loginUser;
    }
}

public class Main {
    public static void main(String[] args) {
        Map<Object, List<Dashboard>> map = new TreeMap<>();
        List<Dashboard> list;

        list = new ArrayList<Dashboard>();
        list.add(new Dashboard(456, "B", 25, 2));
        list.add(new Dashboard(456, "B", 20, 3));
        map.put(456, list);

        list = new ArrayList<Dashboard>();
        list.add(new Dashboard(123, "A", 10, 2));
        list.add(new Dashboard(123, "A", 15, 3));
        list.add(new Dashboard(123, "A", 5, 1));
        map.put(123, list);

        list = new ArrayList<Dashboard>();
        list.add(new Dashboard(789, "C", 30, 1));
        map.put(789, list);

        // Sort the list of Dashboard records with the same requestId in ascending order
        // of status
        for (Entry<Object, List<Dashboard>> entry : map.entrySet()) {
            Collections.sort(entry.getValue(), Comparator.comparing(Dashboard::getProcessed));
        }

        // Display Result
        System.out.println("reqid\tname\tprice\tstatus");
        for (List<Dashboard> recordList : map.values()) {
            for (Dashboard record : recordList) {
                System.out.println(record.getRequestId() + "\t" + record.getLoginUser() + "\t" + record.getPrice()
                        + "\t" + record.getProcessed());
            }
        }
    }
}
reqid   name    price   status
123     A       5       1
123     A       10      2
123     A       15      3
456     B       25      2
456     B       20      3
789     C       30      1