【问题标题】:Find minimum common elements from array.从数组中找到最小的公共元素。
【发布时间】:2017-07-10 22:06:58
【问题描述】:

要求:

User user1=new User("001","mama","hyd",new String[]{"java","spring","bootStrap"});   
User user2=new User("002","gugu","mumbai",new String[]{"java","spring","hibernate"});  
User user3=new User("003","lali","pune",new String[]{"angularjs"});  
User user4=new User("004","asu","kashmir",new String[]{"java"});

List<User> list1=new ArrayList<User>();   
list1.add(user1);  
list1.add(user2);  
list1.add(user3);  
list1.add(user4);

o/p: user1,user2,user4(至少有一项通用技能,例如java)

有什么办法吗?

【问题讨论】:

  • 如果多个用户共享一项以上的技能怎么办?
  • 没问题,但至少应该是普通技能...

标签: java arrays collections


【解决方案1】:

以下代码查找共享至少一项技能的最大用户集:

User user1 = new User("001", "mama", "hyd", new String[]{"java", "spring", "bootStrap"});
User user2 = new User("002", "gugu", "mumbai", new String[]{"java", "spring", "hibernate"});
User user3 = new User("003", "lali", "pune", new String[]{"angularjs"});
User user4 = new User("004", "asu", "kashmir", new String[]{"java"});

List<User> list1 = new ArrayList<User>();
list1.add(user1);
list1.add(user2);
list1.add(user3);
list1.add(user4);

// convert the list of users into a map of skills to users with that skill
Map<String, List<User>> skillsMap = new HashMap<>();
for (User user : list1) {
    for (String skill : user.getSkills()) {
        skillsMap.computeIfAbsent(skill, (key) -> new ArrayList<>()).add(user);
    }
}

// find the largest list of users with a skill
List<User> mostUsers = null;
for (List<User> usersWithSkill : skillsMap.values()) {
    if (mostUsers == null || usersWithSkill.size() > mostUsers.size()) {
        mostUsers = usersWithSkill;
    }
}

// print the ids of the users in the largest user list
for (User user : mostUsers) {
    System.out.println(user);  // assumes there is a valid toString() method for User
}

【讨论】:

  • 优秀的杰森..非常感谢您以正确的评论行快速回复...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-18
  • 1970-01-01
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多