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 filter
function。
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);