Java – 如何从数组中获取项目索引及其值?

如果我有一个数组列表说一个字符串数组,那我怎样才能得到一个元素的索引及其值?

代码测试:

private static final String[] TEST = new String[]{ "abc","bcd","def" } 

要求其索引类似于:

  int i = TEST.getPosition("abc");/TEST.indexof(...);//not available 

我也尝试创建ArrayAdapter。

有这样的吗? 或者我可能需要使用该适配器或其他东西分配它?

要么,

我怎样才能获得元素的索引?

最简单的想法

将数组转换为列表,您可以获取元素的位置。

 List abcd = Arrays.asList(yourArray); int i = abcd.indexOf("abcd"); 

其他解决方案 ,你可以迭代数组:

 int position = 0; for (String obj : yourArray) { if (obj.equals("abcd") { return position; } position += 1; } //OR for (int i = 0; i < yourArray.length; i++) { if (obj.equals("abcd") { return i; } } 

您可以参考此问题并使用Java 8 Lambda filterfunction。

 Optional optional = Arrays.stream(presents) .filter(x -> "MyString".equals(x.getName())) .findFirst(); if(optional.isPresent()) {//Check whether optional has element you are looking for String s = optional.get();//get it from optional } 

filter函数接受lambda回调,并返回一个只包含与lambda中的条件匹配的值的列表。 在我们的例子中,我们也只想要第一个。 这就是添加findFirst()的原因,它只返回第一个值。
该函数将返回一个Optional ,我们可以使用options.isPresent()检查它是否包含值。
optional.get()将返回值。
用你的值替换"MyString" ,它应该工作。

如果要查找索引,可以在将静态数组更改为列表后使用indexOf()函数: Arrays.asList(array) ;

您可以选择两种方法 –

1)首先,因为它是一个数组,你可以简单地运行一个for循环并使用equals()进行比较并找到位置。

2)其次,将其转换为List <>并运行indexOf()并找到位置。

注意:当您将数组转换为List时,它将成为一个支持的版本List,它是固定的,并且大小不能改变 – >但是在您的情况下它完全没问题,因为您的数组是最终的。

 List str = Arrays.asList(TEST); int pos = str.indexOf("abc"); 

正如其他人所说,最简单的方法是Arrays.asList(TEST).indexOf("abc") 。 但是这里有一个使用流的替代方案:

 int index = IntStream.range(0, TEST.length) .filter(i -> TEST[i].equals("abc")) .findFirst() .orElse(-1);