【问题标题】:Java - How to get item index from an array with its value?Java - 如何从具有其值的数组中获取项目索引?
【发布时间】:2018-03-26 03:17:06
【问题描述】:

如果我有一个数组列表,比如一个字符串数组,那么如何获取元素的索引及其值?

代码示例:

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

要求它的索引类似于:

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

我也尝试过创建 ArrayAdapter。

有这样的吗?或者也许我需要将它分配给那个适配器或其他东西?

或者,

我怎样才能得到一个元素的索引?

【问题讨论】:

标签: java android arrays arraylist


【解决方案1】:

最简单的想法

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

List<String> 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;
    }
}

【讨论】:

  • 我宁愿使用普通的 for 循环,也不愿像你在这个例子中那样使用 foreach 循环,你不必担心任何外部变量,而且它更紧凑。
【解决方案2】:

您可以参考this question 并使用Java 8 Lambda filter 函数。

Optional<String> 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
}

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

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

【讨论】:

    【解决方案3】:

    您可以选择两种方法-

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

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

    注意:当您将数组转换为 List 时,它会成为支持版本的 List,它是固定的并且大小不能更改 --> 但在您的情况下它完全可以,因为您的数组是最终的。

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-01-28
        • 2015-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多