Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查ArrayList是否包含来自其他ArrayList的所有字符串_Java_List_Arraylist - Fatal编程技术网

Java 检查ArrayList是否包含来自其他ArrayList的所有字符串

Java 检查ArrayList是否包含来自其他ArrayList的所有字符串,java,list,arraylist,Java,List,Arraylist,我需要检查ArrayList中的所有字符串是否存在于另一个ArrayList中。我可以使用containsAll,但这不是我想要实现的。让我在示例中向您展示: assertThat(firstArray).containsAll(secondArray); 此代码将检查一个数组中的所有项是否位于另一个数组中。但我需要检查一个数组中的每一项是否包含在第二个数组中的任何位置 List<String> firstArray = new ArrayList<>; List<

我需要检查ArrayList中的所有字符串是否存在于另一个ArrayList中。我可以使用containsAll,但这不是我想要实现的。让我在示例中向您展示:

assertThat(firstArray).containsAll(secondArray);
此代码将检查一个数组中的所有项是否位于另一个数组中。但我需要检查一个数组中的每一项是否包含在第二个数组中的任何位置

List<String> firstArray = new ArrayList<>;
List<String> secondArray = new ArrayList<>;
firstArray.add("Bari 1908")
firstArray.add("Sheffield United")
firstArray.add("Crystal Palace")

secondArray.add("Bari")
secondArray.add("Sheffield U")
secondArray.add("C Palace")

你可以这样做

     List<String> firstArray = new ArrayList<>();
            List<String> secondArray = new ArrayList<>();
            firstArray.add("Bari 1908");
            firstArray.add("Sheffield United");
            firstArray.add("Crystal Palace");

            secondArray.add("Bari");
            secondArray.add("Sheffield U");
            secondArray.add("C Palace");

           Set<String> firstSet= firstArray
                    .stream()
                    .collect(Collectors.toSet());

         long count=  secondArray.stream().filter(x->firstSet.contains(x)).count();

///
  Map<String, Boolean> result =
                secondArray.stream().collect(Collectors.toMap(s->s, firstSet::contains));
List firstArray=new ArrayList();
List secondArray=new ArrayList();
添加(“Bari 1908”);
firstArray.add(“谢菲尔德联合”);
添加(“水晶宫”);
第二个数组。添加(“巴里”);
第二个数组。添加(“谢菲尔德U”);
第二个数组。添加(“C宫”);
Set firstSet=firstArray
.stream()
.collect(收集器.toSet());
long count=secondArray.stream().filter(x->firstSet.contains(x)).count();
///
映射结果=
secondArray.stream().collect(Collectors.toMap(s->s,firstSet::contains));
如果计数>0,则第二个数组中的某些项不在第一个数组中

结果包含状态为的字符串


如果您有空间方面的问题,比如一个文件中有数百万个单词,需要先检查第二个文件的条目,然后使用trie,请多谢。从第一个开始,进行trie并检查第一个中第二个的每个条目。

情况:

在你的问题中,你说如果每个元素存在或不存在,你想返回它,而在你的实际代码中,你只返回一个匹配元素的列表

解决方案:

您需要返回一个
Boolean
结果列表,这是您需要的代码:

public static List<Boolean> whichElementsFound(List<String> firstList, List<String> secondList){
        ArrayList<Boolean> resultList = new ArrayList<>();
        for (int i = 0; i < secondList.size(); i++) {
            String team = secondList.get(i);
            resultList.add(firstList.contains(team));
        }
        return resultList;
}
public static List whichechelementsfound(List firstList,List secondList){
ArrayList resultList=新建ArrayList();
对于(int i=0;i
演示:

这是一个使用此方法的示例,分别返回
列表
,以反映在第二个列表中找到第一个列表中的哪个元素

编辑:

如果要返回未找到的元素列表,请使用以下代码:

public static List<String> whichElementsAreNotFound(List<String> firstList, List<String> secondList){
    ArrayList<String> resultList = new ArrayList<>();
    for (int i = 0; i < secondList.size(); i++) {
        String team = secondList.get(i);
        if(!firstList.contains(team)){
            resultList.add(team);
        }
    }
    return resultList;
}
publicstaticlist,其中chelementsarenotfind(List firstList,List secondList){
ArrayList resultList=新建ArrayList();
对于(int i=0;i

这是已更新的。

所以您想检查
secondArray
中的每个字符串是否是
firstArray
中某个字符串的子字符串?如果我理解,您想看看一个列表中的每个字符串是否是另一个列表中的子字符串。在您的示例中,teamMatched将为false,因为最后一个字符串不是子字符串。Java不提供任何这样的库方法来实现这一点。不提供这些类型的方法是有意义的。你所能做的就是使用
streams
并重新构造你的代码。是的,就像你们写的一样,我想检查“secondArray”的每个字符串是否都是“firstArray”中的子字符串@gaganbm是的,看起来像
streams
,重构是最好的方法。我最多只保留现在的代码。这里您将比较
firstArray
中的第一项与第二项中的第一项,依此类推。您需要执行double for循环,以检查
secondArray
中的第一项是否位于
firstArray
@cbrons1中的任何位置。实际上,每个元素都不会与使用
contains()
method.Hmmm的所有第二个列表元素进行比较,实际上,我不想得到布尔ArrayList,但ArrayList的值与
firstArray
中的任何值都不匹配。我重写了您的代码以获得该列表,结果与使用
assertThat(firstArray).containsAll(secondArray)的结果惊人地相同前面我以与您现在相同的方式重写代码,结果不符合预期。请看一下我的演示:这应该是这样的,但我不明白为什么你的代码不是这样的为什么你要使用2个循环?是否要测试第二个列表中的字符串是否包含第一个列表中的字符串?!有趣的是,我需要编写断言,如果能得到测试失败的原因,以及
secondArray
中哪些元素在
firstArray
中不存在等信息,我会很高兴。使用这些解决方案,我得到的布尔值计数是否大于0。测试失败或通过。代码不会检查第二个数组中的项是否为第一个数组中的子字符串。它检查第二个项目是否在第一个项目中。下面是代码示例:“Bari”和“Sheffield U”应该是正确的。
public static List<String> whichElementsAreNotFound(List<String> firstList, List<String> secondList){
    ArrayList<String> resultList = new ArrayList<>();
    for (int i = 0; i < secondList.size(); i++) {
        String team = secondList.get(i);
        if(!firstList.contains(team)){
            resultList.add(team);
        }
    }
    return resultList;
}