有没有办法保留对 hashmap 的引用,它是对象的实例变量?
Is there a way to keep a reference to a hashmap which is an instance variable of an object?
所以我有一个名为 Member 的构造函数。
它存储会员 ID 和会员所有收据的 Hashmap。哈希映射包括一个用于存储购买日期的字符串,以及一个用于存储所购买商品的字符串数组列表。
public class Member {
// Member ID of customer
private int memberID;
// All of the receipts from this customer. Key is Date and Value is List of all items on that date.
public HashMap<String, ArrayList<String>> receipts;
public Member(int memberID) {
this.memberID = memberID;
this.receipts = new HashMap<>();
}
在接下来的class中,生成了会员的收据。每次迭代完成时,通过输入一个新的memberID来实例化一个新的Member对象。
for (int memberID : memberIDSet) {
// Creates a new member based on the ID.
Member currentMember = new Member(memberID);
System.out.println("===== Current Member: " + memberID + " =====");
TreeSet<String> memberPurchaseDates = getMemberPurchaseDates(memberID);
// Goes through the list of dates and searches specifically for the dates in which the memberID purchased an item.
for (String date : memberPurchaseDates) {
// Creates a receipt in the "Member.java" class for the currentMember.
// HERE IS WHERE I AM CONFUSED. Is this possible?
currentMember.receipts.put(date, fillReceipt(memberID, date));
}
//Prints out what I want perfectly, but does not store the hashmap for each new member object created.
System.out.println(currentMember.receipts);
}
每次循环迭代时,对前一个 hashmap 的引用都会丢失。
我该如何存储这些信息?我是否需要创建另一个构造函数 class 来跟踪收据?
我想您可能对 类 感到困惑。您的代码
Member currentMember = new Member(memberID);
为特定成员 ID 创建一个新的空成员,这就是为什么你说哈希映射被重置。它并没有真正被重置,前一个成员对象的哈希映射包含数据。
您的代码实际上看起来是正确的,您只需要存储您的成员。
例如,
List<Member> members = new ArrayList<>();
for (int memberID : memberIDSet) {
// Creates a new member based on the ID.
Member currentMember = new Member(memberID);
System.out.println("===== Current Member: " + memberID + " =====");
TreeSet<String> memberPurchaseDates = getMemberPurchaseDates(memberID);
// Goes through the list of dates and searches specifically for the dates in which the memberID purchased an item.
for (String date : memberPurchaseDates) {
// Creates a receipt in the "Member.java" class for the currentMember.
// HERE IS WHERE I AM CONFUSED. Is this possible?
currentMember.receipts.put(date, fillReceipt(memberID, date));
}
//Prints out what I want perfectly, but does not store the hashmap for each new member object created.
System.out.println(currentMember.receipts);
members.add(currentMember);
}
for (Member member : members) {
System.out.println(member.receipts);
}
除非你想把所有东西都放到1个HashMap中,那样的话你需要从Member中抽取出来。
或者 memberIDSet 是否有重复成员?在这种情况下,它不会是一个集合,但我想你必须保留一个 id 到成员的映射,这样如果该成员已经存在,你就不会创建一个新成员。
所以我有一个名为 Member 的构造函数。
它存储会员 ID 和会员所有收据的 Hashmap。哈希映射包括一个用于存储购买日期的字符串,以及一个用于存储所购买商品的字符串数组列表。
public class Member {
// Member ID of customer
private int memberID;
// All of the receipts from this customer. Key is Date and Value is List of all items on that date.
public HashMap<String, ArrayList<String>> receipts;
public Member(int memberID) {
this.memberID = memberID;
this.receipts = new HashMap<>();
}
在接下来的class中,生成了会员的收据。每次迭代完成时,通过输入一个新的memberID来实例化一个新的Member对象。
for (int memberID : memberIDSet) {
// Creates a new member based on the ID.
Member currentMember = new Member(memberID);
System.out.println("===== Current Member: " + memberID + " =====");
TreeSet<String> memberPurchaseDates = getMemberPurchaseDates(memberID);
// Goes through the list of dates and searches specifically for the dates in which the memberID purchased an item.
for (String date : memberPurchaseDates) {
// Creates a receipt in the "Member.java" class for the currentMember.
// HERE IS WHERE I AM CONFUSED. Is this possible?
currentMember.receipts.put(date, fillReceipt(memberID, date));
}
//Prints out what I want perfectly, but does not store the hashmap for each new member object created.
System.out.println(currentMember.receipts);
}
每次循环迭代时,对前一个 hashmap 的引用都会丢失。
我该如何存储这些信息?我是否需要创建另一个构造函数 class 来跟踪收据?
我想您可能对 类 感到困惑。您的代码
Member currentMember = new Member(memberID);
为特定成员 ID 创建一个新的空成员,这就是为什么你说哈希映射被重置。它并没有真正被重置,前一个成员对象的哈希映射包含数据。
您的代码实际上看起来是正确的,您只需要存储您的成员。 例如,
List<Member> members = new ArrayList<>();
for (int memberID : memberIDSet) {
// Creates a new member based on the ID.
Member currentMember = new Member(memberID);
System.out.println("===== Current Member: " + memberID + " =====");
TreeSet<String> memberPurchaseDates = getMemberPurchaseDates(memberID);
// Goes through the list of dates and searches specifically for the dates in which the memberID purchased an item.
for (String date : memberPurchaseDates) {
// Creates a receipt in the "Member.java" class for the currentMember.
// HERE IS WHERE I AM CONFUSED. Is this possible?
currentMember.receipts.put(date, fillReceipt(memberID, date));
}
//Prints out what I want perfectly, but does not store the hashmap for each new member object created.
System.out.println(currentMember.receipts);
members.add(currentMember);
}
for (Member member : members) {
System.out.println(member.receipts);
}
除非你想把所有东西都放到1个HashMap中,那样的话你需要从Member中抽取出来。
或者 memberIDSet 是否有重复成员?在这种情况下,它不会是一个集合,但我想你必须保留一个 id 到成员的映射,这样如果该成员已经存在,你就不会创建一个新成员。