从ArrayList中获取元素(java)

时间:2018-10-23 09:00:07

标签: java arraylist

正在努力寻找一个简单的查询来匹配并返回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;
    }
}

问候 拉尔夫

2 个答案:

答案 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时,也可以使用其他人发布的流。