Java 如何搜索该列表<;字符串>;包含使用流的字符串的给定数组[]的所有值?

Java 如何搜索该列表<;字符串>;包含使用流的字符串的给定数组[]的所有值?,java,java-stream,Java,Java Stream,我有一个电影对象列表,包括片名、制片人、导演、演员和发行年份。我需要找到哪部电影是由指定导演导演的。然后将找到的所有电影存储在地图中,使用导演作为键,电影标题作为值。我提出了以下代码,但它没有找到任何电影,但实际上data有几部电影是由特定导演导演导演的 String directors = "Wes Craven,John Carpenter,Alfred Hitchcock"; String[] st = directors.split(","); Map<String,List&l

我有一个电影对象列表,包括片名、制片人、导演、演员和发行年份。我需要找到哪部电影是由指定导演导演的。然后将找到的所有电影存储在地图中,使用导演作为键,电影标题作为值。我提出了以下代码,但它没有找到任何电影,但实际上data有几部电影是由特定导演导演导演的

String directors = "Wes Craven,John Carpenter,Alfred Hitchcock";
String[] st = directors.split(",");

Map<String,List<String>> map =  data.stream()
                                .filter(movie -> movie.getDirectors().contains(st[0]) && movie.getDirectors().contains(st[1]) && movie.getDirectors().contains(st[2]))
                                    .collect(Collectors.toMap(Movie::getTitle),m-> m.getDirectors());

map.forEach((m,n) -> System.out.println(m+" : "+n));
String directors=“韦斯·克雷文、约翰·卡彭特、阿尔弗雷德·希区柯克”;
字符串[]st=directors.split(“,”);
Map=data.stream()
.filter(movie->movie.getDirectors().contains(st[0])&&movie.getDirectors().contains(st[1])&&movie.getDirectors().contains(st[2]))
.collect(Collectors.toMap(Movie::getTitle),m->m.getDirectors());
map.forEach((m,n)->System.out.println(m+“:”+n));

如果没有其他信息,很难判断出哪里出了问题。但是,我建议您采取以下措施来解决您的问题:

  • hasDirector(String)
    方法添加到
    Movie
    中,如果电影具有给定的导演,则返回
    true
  • 添加单元测试以确保其正常工作
  • hasAllDirectors(String[])
    方法添加到
    Movie
    ,如果该电影包含所有给定的导演,则返回
    true
  • 添加单元测试以确保其正常工作
  • 将代码转换为
    movieList.stream().filter(m->m.hasAllDirectors(directorArray))
    其中
    directoryArray
    是一个
    字符串[]
  • 添加单元测试以确保其正常工作

  • 如果仍然无法使用,请返回此论坛

    您可以分享您当前的输入和输出吗?(您可能是想对st中的任何导演使用
    |
    ,而不是使用
    &
    ,这意味着st的所有元素都应该是电影对象中导演集合的一部分。)输入:根据电影列出不同的导演姓名。输出:每次条件都变为false。有没有什么方法可以编写谓词以便传递整个字符串,它检查每个控制器列表并与给定的控制器名称匹配?@Naman yup我将常量
    键更改为m.getTitle(),我不认为
    .filter(m->m.hasAllDirectors(directors.split(“,”))
    是一个很好的建议。这意味着每次计算谓词时,都要执行将字符串拆分为子字符串数组的工作。OP在这方面已经做得更好了,一开始只做了一次。此外,
    movie.getDirectors().containsAll(collection)
    将在不需要手动执行任何操作的情况下完成这项工作…您的第一个建议很公平-将进行更改。我不同意你的第二个观点。