正在努力寻找一个简单的查询来匹配并返回ArrayList
中的元素。
我首先将HashSet
存储在ArrayList
中,因为HashSet
没有get方法,然后检查ArrayList
(其中包含正确的元素,套接字引用的字符串)
List theseSocks = new ArrayList(NodeConnMaster.sockList);
System.out.println("array list contains " + theseSocks);
然后,我想遍历并在元素中找到匹配的ipAddress,一旦找到,则将变量设置为整个元素,所以类似-
for (int i =0; i< theseSocks.size(); i++) {
if (theseSocks.toString().contains(ipAddress)) {
int element = theseSocks.get();
System.out.println("the element is " + element);
}
}
但是看来get需要一个索引位置,而我试图基于字符串内容而不是索引来获取。
是否有比删除除匹配元素之外的所有其他元素然后返回索引0
更简单的方法。
或者ArrayList
并非可行之路。
解决方案是在SBylemans的帮助下-
Object currentSock = null;
for (int i =0; i< theseSocks.size(); i++)
{
currentSock = theseSocks.get(i);
if (currentSock.toString().contains(ipAddress))
{
System.out.println("the element is " +currentSock);
break;
}
}
问候 拉尔夫
答案 0 :(得分:3)
您可以使用Java8流来过滤所需的元素,例如:
List wantedList = theseSocks.stream()
.filter(e ->e.toString().contains(ipAddress))
.collect(Collectors.toList())
答案 1 :(得分:1)
您正在遍历ArrayList,并希望根据String值进行比较。但是像这样的循环将立即为您提供索引。您的循环应如下所示:
for (int i =0; i< theseSocks.size(); i++)
{
String currentSock = theseSocks.get(i);
if (currentSock.equals(ipAddress))
{
System.out.println("the element is " +currentSock);
break;
}
}
甚至是forEach
循环
for (String currentSock: theseSocks)
{
if (currentSock.equals(ipAddress))
{
System.out.println("the element is " +currentSock);
break;
}
}
break
用于在发现元素后中断for循环。
此外,如果数组包含您要查找的ipAddress,那么您的if
条件将导致打印每个元素。
编辑,然后在使用Java 8时,也可以使用其他人发布的流。