我有一个学校项目,其中涉及根据每个用户输入的四个最喜欢的科目,向学生推荐大学课程。
我的方法是在Java HashMap
中使用HashMap<String, Set<String>>
。该课程是简单的字符串,而每套课程都包含该课程所需的四个主题。
每个条目都应手动添加,但每个条目又需要许多Set对象实例:
Set<String> setA = new HashSet<String>(); // for first pair
Set<String> setB = new HashSet<String>(); // for second pair.
依此类推...
对于每个键/值条目,我要检查/比较值(主题集)与用户输入的四个主题,如果该集合包含输入的主题,则将键(课程)添加到匹配项中数组。
有人对我应该怎么做有任何想法吗?
我已经尝试过了。我真的需要按时完成任务
答案 0 :(得分:0)
我假设您想要的是Map.Entry。您在问题中提到要使用HashMap。要遍历HashMap的值列表,您可以执行以下操作:
for(Map.Entry<Integer, Integer> eachEntry : hashMap.entrySet())
{
int key = eachEntry.getKey();
int value = eachEntry.getValue();
}
在我的示例中,它是一个包含Integer键值对的哈希表,但是您可以将其更改为所需的类型。快速的Google搜索将显示如何在哈希图中执行Set。希望对您有帮助
答案 1 :(得分:0)
您可以通过遍历hashMap键来比较值
router.post('/admin', ensureAuthenticated, async (req, res) => {
try {
const { truckDriver, truckNumber, admin, customer, loadPlanning } = req.body;
const adminArray = await User.find({ isVerified: true });
if (!adminArray) {
return;
}
for (var key in req.body) {
if (req.body.hasOwnProperty(key)) {
adminArray.forEach(function (data) {
if (truckDriver == data.email) {
console.log(truckDriver);
User.findOneAndUpdate({ email: data.email }, { truckDriver: true });
}
if (truckNumber == data.email) {
console.log(truckNumber);
User.findOneAndUpdate({ email: data.email }, { truckNumber: truckNumber });
}
if (admin == data.email) {
console.log(admin);
User.findOneAndUpdate({ email: data.email }, { admin: true });
}
if (customer == data.email) {
console.log(customer);
User.findOneAndUpdate({ email: data.email }, { customer: true });
}
if (loadPlanning == data.email) {
console.log(loadPlanning);
User.findOneAndUpdate({ email: data.email }, { loadPlanning: true });
}
});
}
}
req.flash('success_msg', 'Your accounts have been processed!');
res.redirect('/admin');
}
catch (e) {
res.send('error_msg');
console.log(e);
};
});