indexOf返回-1

时间:2018-02-07 15:38:03

标签: java android arrays indexof

我正在搜索集合中的字符串并继续-1返回

以下是我的代码:

Set<String> myTokens = sharedPreferences.getStringSet("myTokens", new HashSet<String>());

    if(String.valueOf(myTokens).contains(auth.getUid())){
        int i = Arrays.asList(myTokens).indexOf(auth.getUid());
        Log.w(TAG, "Index position of token is: " + String.valueOf(i) + " where the token array is: " + myTokens + "auth.getUid() is: " + auth.getUid());

我的输出:

Index position of token is: -1 where the token array is: [0o75WmAAlTcWUzxgbcleBQSVQSr1, Ztg4GOqeucd6CqNAEokUe7eRHhY2, VatU5fy1U4cgTc3uBBiGX7G7kuT2] auth.getUid() is: Ztg4GOqeucd6CqNAEokUe7eRHhY2

不确定为什么我会一直得到-1,任何想法?

人们已经建议auth.getUid()的值不在集合中..但&#34; Ztg4GOqeucd6CqNAEokUe7eRHhY2&#34; 出现在我放在底部的集合中问题

感谢阅读!

1 个答案:

答案 0 :(得分:6)

Arrays.asList(myTokens)

由于myTokensSet<String>,因此此表达式的类型为List<Set<String>>,而不是List<String>

由于List<Set<String>>无法包含String元素,indexOf(someString)将始终返回-1。

你应该使用

new ArrayList<>(myTokens)

而是生成集合的副本,在评估此表达式时,迭代次序中包含元素。

但是:myTokens是{或者,至少,它可以是)HashSet,这是一个无序集合。因此,&#34;索引&#34;没有任何意义,因为如果再次计算,则无法保证索引是相同的。如果集合包含元素,则选择零是一种同样有效的策略。