use*_*885 0 java arrays android 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());
Run Code Online (Sandbox Code Playgroud)
我的输出:
Index position of token is: -1 where the token array is: [0o75WmAAlTcWUzxgbcleBQSVQSr1, Ztg4GOqeucd6CqNAEokUe7eRHhY2, VatU5fy1U4cgTc3uBBiGX7G7kuT2] auth.getUid() is: Ztg4GOqeucd6CqNAEokUe7eRHhY2
Run Code Online (Sandbox Code Playgroud)
不知道为什么我一直得到-1,任何想法?
人们已经建议auth.getUid()的值不在集合中..但是"Ztg4GOqeucd6CqNAEokUe7eRHhY2"出现在我放在问题底部的集合中
谢谢阅读!
Arrays.asList(myTokens)
Run Code Online (Sandbox Code Playgroud)
既然myTokens
是a Set<String>
,这个表达式有类型List<Set<String>>
,而不是List<String>
.
由于a List<Set<String>>
不能包含String
元素,indexOf(someString)
因此总是返回-1.
你应该用
new ArrayList<>(myTokens)
Run Code Online (Sandbox Code Playgroud)
而是在制作该集合的副本时,在评估此表达式时,迭代顺序中包含元素.
但是:myTokens
是(或者,至少,它可以)a HashSet
,这是一个无序的集合.因此,"索引"没有任何意义,因为如果再次计算索引,则无法保证索引是相同的.如果集合包含元素,则选择零是一种同样有效的策略.