Java 如何检查字符串是否在hashmap内的arrayList中

Java 如何检查字符串是否在hashmap内的arrayList中,java,arraylist,hashmap,Java,Arraylist,Hashmap,所以我有一个hashmap HashMap<String, ArrayList<String> gMap = new HashMap<String, ArrayList<String>(); 我正在尝试这样做,只有组长才允许邀请玩家,但是如果一个玩家不是任何组的一部分,并且邀请了另一个用户,那么会自动创建一个组,并且该玩家将成为组长 所以,通常我会这么做 for(ArrayList<String> list : gMap.values()){

所以我有一个hashmap

HashMap<String, ArrayList<String> gMap = new HashMap<String, ArrayList<String>();
我正在尝试这样做,只有组长才允许邀请玩家,但是如果一个玩家不是任何组的一部分,并且邀请了另一个用户,那么会自动创建一个组,并且该玩家将成为组长

所以,通常我会这么做

for(ArrayList<String> list : gMap.values()){
    if(list.contains(user)){
        //do something since the player is not part of the list
    }
}
for(ArrayList:gMap.values()){
if(列表包含(用户)){
//做点什么,因为玩家不在列表中
}
}
但是我不能这样做,因为可能有多个arrayList,所以即使用户不是一个arrayList的一部分,也不意味着他们不在另一个arrayList中


因此,我很好奇如何检查所有的ArrayList,并且仅当用户不是其中任何一个的一部分时才执行某些操作。

使用一个
布尔值,如果列表包含用户,则只更改该值;如果列表包含用户,则将
从循环中断开

boolean notInAnyList = true;
for(ArrayList<String> list : gMap.values()){
    if(list.contains(user)){
        notInAnyList = false;
        break; // No point in iterating any further
    }
}

if (notInAnyList) {
    // Handle user not being in any of the lists here
}
boolean notInAnyList=true;
for(ArrayList:gMap.values()){
if(列表包含(用户)){
notInAnyList=false;
break;//进一步迭代没有意义
}
}
如果(不在列表中){
//处理不在此处任何列表中的用户
}

使用一个
布尔值,如果列表包含用户,则只更改其值;如果列表包含用户,则将
从循环中断开

boolean notInAnyList = true;
for(ArrayList<String> list : gMap.values()){
    if(list.contains(user)){
        notInAnyList = false;
        break; // No point in iterating any further
    }
}

if (notInAnyList) {
    // Handle user not being in any of the lists here
}
boolean notInAnyList=true;
for(ArrayList:gMap.values()){
if(列表包含(用户)){
notInAnyList=false;
break;//进一步迭代没有意义
}
}
如果(不在列表中){
//处理不在此处任何列表中的用户
}

下面是一个代码示例

boolean userIsPartOfGroup = false
for(ArrayList<String> list : gMap.values()){
    if(list.contains(user)){
       userIsPartOfGroup = true;
       break;
    }
}
if(!userIsPartOfGroup){
gMap.add(user).add(new ArrayList(user));
}
boolean userIsPartOfGroup=false
for(ArrayList:gMap.values()){
if(列表包含(用户)){
userIsPartOfGroup=true;
打破
}
}
如果(!userIsPartOfGroup){
add(用户).add(新数组列表(用户));
}

下面是一个代码示例

boolean userIsPartOfGroup = false
for(ArrayList<String> list : gMap.values()){
    if(list.contains(user)){
       userIsPartOfGroup = true;
       break;
    }
}
if(!userIsPartOfGroup){
gMap.add(user).add(new ArrayList(user));
}
boolean userIsPartOfGroup=false
for(ArrayList:gMap.values()){
if(列表包含(用户)){
userIsPartOfGroup=true;
打破
}
}
如果(!userIsPartOfGroup){
add(用户).add(新数组列表(用户));
}

您实际上是在这里创建一个(键到值集合的映射)数据结构,您会发现,如果您直接使用它,就不必像现在这样重新发明轮子。定义了一个非常好的方法,包括一个存储所需数据的方法,并有一个干净地执行所需操作的方法。正如其他人所提到的,针对列表的包含检查速度很慢,如果您实际上不关心顺序,或者如果您确实关心顺序,则可以使用来更有效地执行这些包含检查


如果你还没有使用番石榴,你就错过了——它提供了无数优秀的实用程序和良好的实践。

你实际上在这里创建了一个(键到值集合的映射)数据结构,你会发现如果你直接使用它,你就不必像现在这样重新发明轮子。定义了一个非常好的方法,包括一个存储所需数据的方法,并有一个干净地执行所需操作的方法。正如其他人所提到的,针对列表的包含检查速度很慢,如果您实际上不关心顺序,或者如果您确实关心顺序,则可以使用来更有效地执行这些包含检查


如果您还没有使用Guava,那么您就错过了—它提供了无数优秀的实用程序和良好实践。

首先,我将使用集合而不是列表(Java 7语法):

以下是帮助器方法:

private boolean isLeader(String player, Map<String, Set<String> gMap) {
  return gMap.keys().contains(player);
}

private boolean isMember(String player, Map<String, Set<String> gMap) {
  for (Set<String> members : gMap.values()) {
    if (members.contains(player)) {
      return true;
    }
  }
  return false;
}

private Set<String> addNewGroup(String leader, Map<String, Set<String> gMap) {
  Set<String> players = new HashSet<>();
  gmap.put(leader, players);
  return players;
}

private boolean isLeader(字符串播放器,Map首先,我将使用集合而不是列表(Java 7语法):

以下是帮助器方法:

private boolean isLeader(String player, Map<String, Set<String> gMap) {
  return gMap.keys().contains(player);
}

private boolean isMember(String player, Map<String, Set<String> gMap) {
  for (Set<String> members : gMap.values()) {
    if (members.contains(player)) {
      return true;
    }
  }
  return false;
}

private Set<String> addNewGroup(String leader, Map<String, Set<String> gMap) {
  Set<String> players = new HashSet<>();
  gmap.put(leader, players);
  return players;
}

<代码>私有布尔IsHead(String Poor,MapGet所有的<代码> ARARYLIST/<代码>值并检查它们。看起来你已经这样做了……重复遍历你的地图元素,然后搜索每一个地图条目的列表。如果你关心性能和可伸缩性,你可能想单独考虑跟踪哪个组(如果有的话)。一个玩家属于你。然后你得到你在O(1)中寻找的答案,但您必须处理同步问题。除了我上面的评论之外,您可能已经需要考虑同步问题,具体取决于您的用例。获取所有
ArrayList
值并检查它们。看起来您已经在这样做了……迭代您的地图元素,然后搜索每个地图条目的列表。如果你关心性能和可伸缩性,你可能想单独考虑一个玩家属于哪个组(如果有的话)。然后你得到你在O(1)中寻找的答案。,但您必须处理同步问题。除我上面的评论外,您可能已经需要考虑同步问题,具体取决于您的用例。