java - Java - 在另一个地图中创建地图时出现问题
问题描述
我正在尝试创建一个程序来跟踪一堆不同的字符串,并将它们与当前用户输入的名称(另一个字符串)“联系在一起”,这意味着每个人都应该有自己的钱包。我尝试使用另一个地图中的地图来做到这一点,但这是我的大脑超负荷的地方。我如何将每个钱包与正确的名称联系起来,然后显示所有这些?我的代码中的注释就是一个很好的例子。这是我到目前为止所拥有的:
Scanner sysin = new Scanner(System.in);
boolean firstTime = true;
Map<String, Set<Long>> walletTracker = new HashMap<String, Set<Long>>();
Map<String, Map<String, Set<Long>>> nameTracker = new HashMap<String, Map<String, Set<Long>>>();
if(!firstTime) {
/* Here it should display every entered name, wallet and time of deposit, like this:
Jack:
JacksWallet:
[12345], [123456], [1234567]
JacksOtherWallet:
[123], [1234]
Jonathan:
JonsWallet:
[12345678]
*/
}
for(int i = 0; i < 1;) {
System.out.print("Enter your name: ");
String name = sysin.nextLine();
System.out.print("Please enter a wallet name: ");
String wallet = sysin.nextLine();
Set<Long> deposits = walletTracker.getOrDefault(name, new HashSet<>());
deposits.add(System.currentTimeMillis());
walletTracker.put(wallet, deposits);
nameTracker.put(name, walletTracker);
System.out.println("You successfully withdrew money from "+ wallet +". Press enter to continue...");
firstTime = false;
String enter = sysin.nextLine();
}
解决方案
Set<Long> deposits = walletTracker.getOrDefault(name, new HashSet<>());
new HashSet<>()
如果没有映射,则返回,name
但不会将其添加到映射中。您想要的是.computeIfAbsent
,它只会返回与 一起出现的映射name
,但如果它根本不存在,它会评估您的 lambda,然后将其添加到映射中,然后返回:
Set<Long> deposits = walletTracker.computeIfAbsent(name, k -> new HashSet<>());
那是'lambda'语法 - 你不写一个解析为新哈希集的表达式,你写一个解析为一个函数的表达式,当提供密钥时产生一个新的哈希集(我们在这里不需要,并且是name
无论如何都等于)。
这里的 Java 式策略是Wallet
至少创建一个类。一般来说,一旦你开始放入<>
`<>,尤其是当你有 3 个级别的深度时,停止并开始编写类。
那应该是一个Map<String, Wallet>
和一个Map<String, Person>
或诸如此类的东西。
推荐阅读
- java - 如何在 android studio 中为扫描图像创建文件路径并添加到 SQL 数据库?
- react-redux - redux-saga 无法从调度的动作中获取有效负载值
- javascript - 如何检查是否隐藏?
- python - 用于复杂多处理和多线程模糊测试的 Python 测试工具
- c# - C# - 从持久存储中检索数据并将其保存到视图模型
- html - 在 Outlook 中转发 html 生成的电子邮件时出现格式问题
- python - ValueError: 无法挤压 dim[1],预期维度为 1,
- python - 动态更新绘图仪表图表值(Python)
- javascript - 2020:iOS Safari 视频自动播放选项?
- php - 如何从头开始在 WordPress 中创建自定义实时搜索