首页 > 解决方案 > 检查 ArrayList 是否不包含 Java 中的字符串

问题描述

我有两个 ArrayList:myList 和 myList1。myList 包含字符串,例如“aaa 111”、“bbb 222”和“aaa 333”。myList1 当前为空,但我想通过查看 myList1 是否不包含 myList 中的部分字符串来填充它。例如,“符号”变量是“aaa”。“num”变量是“111”。“s”变量是符号+数字。所以“s”变量是“aaa 111”。对于此代码,aaa 111 将被添加到 myList1(因为 myList1 不包含 aaa),bbb 222 将被添加到 myList1(因为 myList1 不包含 bbb;此时它只包含 aaa 111),aaa 333 应该不被添加到 myList1 并且应该转到 else 语句(因为 myList1 已经包含 aaa(因为 aaa 111))。然而,

if (!myList1.contains(symbol)) {            
     myList1.add(s);
} else {
     //do something
}

标签: javastringarraylistcontains

解决方案


正如评论中已经指出的那样,您需要拆分字符串以从中提取符号并维护一组已添加的符号。添加时您可以检查当前元素的符号是否在已添加的符号内:

private static List<String> createDistinctSymbolList(List<String> myList) {
    List<String> result = new ArrayList<>();
    Set<String> addedSymbols = new HashSet<>();

    for (String s : myList) {
        String currentSymbol = getSymbol(s);
        if (!addedSymbols.contains(currentSymbol)) {
            result.add(s);
        }
        addedSymbols.add(getSymbol(s));
    }
    return result;
}

private static String getSymbol(String str) {
    String[] parts = str.split(" ");
    return parts[0];
}

我用这段代码测试了它:

List<String> myList = new ArrayList<>();
myList.add("aaa 111");
myList.add("bbb 222");
myList.add("aaa 333");

List<String> distincAAA = createDistinctSymbolList(myList);
distincAAA.forEach(System.out::println);

这将打印出以下输出:

List<String> myList = new ArrayList<>();
myList.add("aaa 111");
myList.add("bbb 222");
myList.add("aaa 333");

List<String> distincAAA = createDistinctSymbolList(myList);
distincAAA.forEach(System.out::println);

推荐阅读