在java中迭代期间存储多个匹配项

在java中迭代期间存储多个匹配项,java,arraylist,collections,Java,Arraylist,Collections,我试图在场景中解决以下问题 我的方法接受用户输入的ArrayList,我在一个单独的类中还有一个HashMap 我需要的是将用户输入与HashMap的关键字匹配,并存储相应的ArrayList(从HashMap键返回)以供进一步操作 问题是,在一次匹配之后,我不确定如何继续,因为我正在使用为每个循环进行用户输入。在第一次匹配之后,我需要继续寻找第二次、第三次,依此类推 对于每个HashMap键匹配,我需要存储适当的ArrayList-因此我认为它应该如下所示: ArrayList<Stri

我试图在场景中解决以下问题

我的方法接受用户输入的
ArrayList
,我在一个单独的类中还有一个
HashMap

我需要的是将用户输入与HashMap的关键字匹配,并存储相应的ArrayList(从HashMap键返回)以供进一步操作

问题是,在一次匹配之后,我不确定如何继续,因为我正在使用
为每个循环进行用户输入。
在第一次匹配之后,我需要继续寻找第二次、第三次,依此类推

对于每个HashMap键匹配,我需要存储适当的ArrayList-因此我认为它应该如下所示:

ArrayList<String> match1 = hashMap.get(wordFromInput);
ArrayList<String> match2 = hashMap.get(wordFromInput2);
ArrayList match1=hashMap.get(wordFromInput);
ArrayList match2=hashMap.get(wordFromInput2);

对我来说,这似乎应该有一个简单/明显的解决方案,但我还没有找到它。有什么建议吗?

您可以通过创建HashMap入口集的流来完成手头的任务,然后
将结果放入列表中

List<ArrayList<String>> resultSet = hashMap.entrySet()
                        .stream()
                        .filter(e -> inputArrayList.contains(e.getKey()))
                        .map(Entry::getValue)
                        .collect(Collectors.toCollection(ArrayList::new));
List resultSet=hashMap.entrySet()
.stream()
.filter(e->inputArrayList.contains(e.getKey()))
.map(条目::getValue)
.collect(收集器.toCollection(ArrayList::new));
使用命令式方法:

List<ArrayList<String>> resultSet = new ArrayList<>();
for (Map.Entry<String, ArrayList<String>> entry : hashMap.entrySet())
{
      if(inputArrayList.contains(entry.getKey())){
           resultSet.add(entry.getValue());
      }
}
List resultSet=new ArrayList();
for(Map.Entry:hashMap.entrySet())
{
if(inputArrayList.contains(entry.getKey())){
add(entry.getValue());
}
}

您可以通过创建HashMap入口集的流来完成手头的任务,然后将结果放入列表中

List<ArrayList<String>> resultSet = hashMap.entrySet()
                        .stream()
                        .filter(e -> inputArrayList.contains(e.getKey()))
                        .map(Entry::getValue)
                        .collect(Collectors.toCollection(ArrayList::new));
List resultSet=hashMap.entrySet()
.stream()
.filter(e->inputArrayList.contains(e.getKey()))
.map(条目::getValue)
.collect(收集器.toCollection(ArrayList::new));
使用命令式方法:

List<ArrayList<String>> resultSet = new ArrayList<>();
for (Map.Entry<String, ArrayList<String>> entry : hashMap.entrySet())
{
      if(inputArrayList.contains(entry.getKey())){
           resultSet.add(entry.getValue());
      }
}
List resultSet=new ArrayList();
for(Map.Entry:hashMap.entrySet())
{
if(inputArrayList.contains(entry.getKey())){
add(entry.getValue());
}
}

列表列表?@m0skit0是否要在迭代期间将每个ArrayList匹配项添加到整个ArrayList?是的,
ArrayList
。我确实有这个想法,但之后,我需要处理每个集合元素。我试图找到如何将它们分解成单独的ArrayList(如果我将它们添加到一个大的ArrayList中),但失败了。关于方法的建议?列表列表?@m0skit0您的意思是在迭代期间将每个ArrayList匹配项添加到整个ArrayList中吗?是的,
ArrayList
。我确实有这个想法,但之后,我需要处理每个集合元素。我试图找到如何将它们分解成单独的ArrayList(如果我将它们添加到一个大的ArrayList中),但失败了。关于如何做到这一点的建议?谢谢你的帮助,很抱歉我很傻,但我不是100%确定如何实现这一点。你能详细说明/添加评论吗?@Codingnooby inside“我的方法接受用户输入的数组列表”假设方法参数被调用为
inputArrayList
,并且您已经使用标识符
HashMap
检索了
HashMap
实例来引用该实例,那么您可以简单地使用方法通过该代码,它应该可以完成这项工作。我非常感谢您的帮助,Aomine,但是出于某种原因,它没有编译,我不知道为什么。老实说,我理解您的方法背后的逻辑,但它使用了Java中我还没有介绍过的概念,我不能说我可以轻松地使用它。但是,如果我理解正确,结果集是一个包含ArrayList元素的列表?非常感谢您的回答。@Codingnooby请参见编辑。我已经包括了一个你会更熟悉的命令式方法,是的resultSet是ArrayList元素的列表。非常感谢,这看起来很棒!您还可以帮助(给我指出一个方法)从resultSet列表中提取和存储每个ArrayList,因为我需要在匹配它们之后单独使用它们吗?我已经尝试过搜索这个,但没有结果。再次感谢,非常感谢您的帮助!谢谢你的帮助,很抱歉我太傻了,但我不是100%确定如何实现这一点。你能详细说明/添加评论吗?@Codingnooby inside“我的方法接受用户输入的数组列表”假设方法参数被调用为
inputArrayList
,并且您已经使用标识符
HashMap
检索了
HashMap
实例来引用该实例,那么您可以简单地使用方法通过该代码,它应该可以完成这项工作。我非常感谢您的帮助,Aomine,但是出于某种原因,它没有编译,我不知道为什么。老实说,我理解您的方法背后的逻辑,但它使用了Java中我还没有介绍过的概念,我不能说我可以轻松地使用它。但是,如果我理解正确,结果集是一个包含ArrayList元素的列表?非常感谢您的回答。@Codingnooby请参见编辑。我已经包括了一个你会更熟悉的命令式方法,是的resultSet是ArrayList元素的列表。非常感谢,这看起来很棒!您还可以帮助(给我指出一个方法)从resultSet列表中提取和存储每个ArrayList,因为我需要在匹配它们之后单独使用它们吗?我已经尝试过搜索这个,但没有结果。再次感谢,非常感谢您的帮助!