Добавить определенный пользователем объект в качестве ключа в хэш-карту - PullRequest
0 голосов
/ 08 мая 2020
public class Dashboard {
int REQUEST_ID, PRICE;           
String LOGIN_USER;

public int getREQUEST_ID() {
 return REQUEST_ID;
}

public void setREQUEST_ID(int rEQUEST_ID) {
 REQUEST_ID = rEQUEST_ID;
 }

 //all getters and setters
public class DBConnection {
public ArrayList<Dashboard>  getStoreResult() {
  ArrayList<Dashboard> dashRec=new ArrayList<Dashboard>();
  Dashboard dash = new Dashboard();

try{
  Class.forName("");
  Connection con=DriverManager.getConnection("");
  Statement st=con.createStatement();
  ResultSet rs=st.executeQuery("");

  HashMap<Object, List<Dashboard>> map = new HashMap<>();
  while (rs.next()) {
    Integer id = rs.getInt(1);
    if (!map.containsKey(id)) {
        dashRec= new ArrayList<Dashboard>();
        map.put(id, dashRec);
    }
    dash = new Dashboard();
    dash.setREQUEST_ID(id);
    dash.setLOGIN_USER(rs.getString(2));
    dash.setPRICE(rs.getInt(3));
    map.get(id).add(dash);
     } 
    }

Я хочу добавить имя и Reqid для каждого набора строк в качестве ключевого объекта на карте. Поэтому, как и для id 123, мне нужна карта с id = 123, Name = A в качестве ключа. Значение будет arrayylist, которое содержит все строки, указанные от c до id. Для id = 123, arrayylist содержит первые 3 строки как 3 объекта. Я хочу добавить id 123 и имя в качестве ключа для всех наборов строк.

SQL DB

Ответы [ 3 ]

1 голос
/ 08 мая 2020

попробуйте это для уникальности

public class Dashboard {
int REQUEST_ID, PRICE;           
String LOGIN_USER;

public int getREQUEST_ID() {
 return REQUEST_ID;
}

public void setREQUEST_ID(int rEQUEST_ID) {
 REQUEST_ID = rEQUEST_ID;
 }


  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Dashboard dash = (Dashboard) o;
    return Objects.equals(REQUEST_ID, dash.REQUEST_ID) && Objects.equals(LOGIN_USER, dash.LOGIN_USER) && && Objects.equals(PRICE, dash.PRICE);
  }

  @Override
  public int hashCode() {
    return Objects.hash(REQUEST_ID, PRICE+","+LOGIN_USER
    );
  }


 }
1 голос
/ 08 мая 2020

Вы можете материализовать свой ключ как определенный тип c.

public class MapKey {
  private Integer id;
  private String name;

  MapKey(Integer id, String name) {
    this.id = id;
    this.name = name;
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    MapKey mapKey = (MapKey) o;
    return Objects.equals(id, mapKey.id) &&
            Objects.equals(name, mapKey.name);
  }

  @Override
  public int hashCode() {
    return Objects.hash(id, name);
  }
}

, а затем использовать этот объект в качестве ключа вашей карты.

map.put(new MapKey("", 0), new Dash...);

ps: не забывайте самые важные части -> переопределите правильно equals и hashcode в MapKey

Извлечение:

MapKey key = new MapKey(rs.getInt(1), rs.getString(2));
if (!map.containsKey(key)) {
    dashRec= new ArrayList<Dashboard>();
    map.put(key, dashRec);
}
0 голосов
/ 11 мая 2020

@ Азиз

попробуйте это

 //all getters and setters
public class DBConnection {
public ArrayList<Dashboard>  getStoreResult() {
  ArrayList<Dashboard> dashRec=new ArrayList<Dashboard>();
  Dashboard dash = new Dashboard();

try{
  Class.forName("");
  Connection con=DriverManager.getConnection("");
  Statement st=con.createStatement();
  ResultSet rs=st.executeQuery("");

  HashMap<Object, List<Dashboard>> map = new HashMap<>();

while (rs.next()) {

     Integer id = rs.getInt(1);
    Set<Dashboard> keysets = map.keySet();
    Dashboard d = null;
    for (Dashboard dash : keysets) {
        if(dash.getREQUEST_ID().equals.(id)){
            d = dash;
            break;
        }
    }

    Dashboard dash1 = new Dashboard();
    dash1.setREQUEST_ID(id);
    dash1.setLOGIN_USER(rs.getString(2));
    dash1.setPRICE(rs.getInt(3));

    if(d!=null){
        map.get(d).add(dash1)
    }else{
        List<Dashboard> lst = new ArrayList<>();
        lst.add(dash1);
        map.put(dash1,lst)
    }
    }
}   
...