有没有一种方法可以将集合映射到字符串而无需创建许多集合实例?

时间:2020-02-23 20:00:09

标签: java hashmap iterator set key-value

我有一个学校项目,其中涉及根据每个用户输入的四个最喜欢的科目,向学生推荐大学课程。

我的方法是在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.

依此类推...

对于每个键/值条目,我要检查/比较值(主题集)与用户输入的四个主题,如果该集合包含输入的主题,则将键(课程)添加到匹配项中数组。

有人对我应该怎么做有任何想法吗?

我已经尝试过了。我真的需要按时完成任务

2 个答案:

答案 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);
  };
});