[英]Java: Many-to-one bidirectional lookup
我有多對一關系的數據。 我希望能夠從兩個方向查找數據。 一個例子:
0 : a
1 : b
2 : b
3 : b
4 : c
get(0) --> a
get(1) --> b
get(a) --> 0
get(b) --> (1:3)
這有意義嗎? 可能嗎?
這絕對是可能的。 以下是添加項目的代碼片段:
Map<Integer,String> forwardMap = new HashMap<>();
Map<String,Set<Integer>> reverseMap = new HashMap<>();
void add(Integer x, String y) {
forwardMap.put(x, y);
if (!reverseMap.containsKey(y))
reverseMap.put(y, new HashSet<Integer>());
reverseMap.get(y).add(x);
}
腳注:Apache Commons有BidiMap,Google Guava有BiMap,但這些似乎是一對一的地圖,不允許問題中提到的多對一案例。
只需使用2個hahsmap。 假設你的“one”是Integer類型,而“many”是String類型以簡化。
HashMap<Integer, String> intToString = new HashMap<>();
HashMap<String, HashSet<Integer>> stringToInt= new HashMap<>();
連接元素的功能:
public void linkElements(Integer i, String s){
intToString.add(i,s);
stringToInt.get(s).add(i);
}
獲得價值將是這樣的:
intToString.get(0); // returns "a"
stringToInt.get("b"); // returns a set {1,2,3}
是的,使用JPA(Java Persistence API),它將使您能夠生成@OneToMany,並且在子級中它將為您提供帶有@ManyToOne的List,基本上它將引用您的專利屬性的屬性。 例
public class Table1{
@Id
int id ;
@OneToMany
List<Table2> ls ;
// getter and setter ...
}
public class Table2{
@Id
int id ;
@ManyToOne
Table1 t1 ;
// getter and setter ...
}
希望這對你有幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.