java - 检查 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
}
解决方案
正如评论中已经指出的那样,您需要拆分字符串以从中提取符号并维护一组已添加的符号。添加时您可以检查当前元素的符号是否在已添加的符号内:
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);
推荐阅读
- asp.net-mvc - Sitefinity 更改已发布但无法在浏览器中运行
- hibernate - 对于 DDL,ElementCollection 中的 Embeddable 中的约束被忽略
- c++ - 一个类可以包含一个后来专门用于派生类的基类作为成员吗?
- kotlin - 如何在返回 Deferred 的异步函数中延迟
- lua - 使用 Lua 脚本避免宏病毒行为?
- python - Numpy arcsinh np.arcsinh() 转换函数的比例参数
- botframework - Oauth 登录不起作用,显示:['application/vnd.microsoft.card.oauth' 类型的文件]
- ruby-on-rails - 关系数据库和外键
- git - 我的项目文件没有被推送到 GitHub 存储库
- javascript - 将项目添加到收藏夹并将其保存在 Cookie 中