如何在arraylist中找到第n个索引
例如:我有List<Character> charList = new ArrayList<Character>(Arrays.asList('s', 'h','a','r','a','n'))
charList.indexOf('a');
始终提供a
的第一个索引。
我怎么得到第n个?
答案 0 :(得分:1)
ArrayList中的indexOf()实现:
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
所以你可以尝试列出这个:
public int indexNth(List charList, int n, Object _enum) {
int index = 0;
int findTimes = 0;
if (n == 0)
return -1;
if (CollectionUtils.isEmpty(charList))
return -1;
for (Object o : charList) {
if (o.equals(_enum))
findTimes++;
if (findTimes >= n)
return index;
index++;
}
return -1;
}
答案 1 :(得分:1)
这是基于Java 8 Streams的方法:
List<Character> charList = new ArrayList<>(Arrays.asList('s', 'h','a','r','a','n'));
int[] allIndexes = IntStream.range(0, charList.size())
.filter(i -> charList.get(i).equals('a'))
.toArray();
System.out.println(Arrays.toString(allIndexes));
这将在输入数组charList
中搜索与所需元素'a'
相等的所有元素,并返回包含匹配元素索引的数组。如果N小于allIndexes[N]
,则第N次出现在allIndexes.length
,否则不会出现第N次。 (这假设N是从零开始的,就像数组和List索引是Java一样。)
在这种情况下,结果是
[2, 4]
答案 2 :(得分:0)
indexOf('a')
会返回第一个&#39; a&#39;的索引。列表中的元素。
为了找到第n个&#39; a&#39;的索引,您需要遍历列表:
int count = 0;
int index = -1;
for (int i = 0; i < charList.size(); i++) {
if charList[i].equals('a') {
count++;
}
if (count == 2) {
index = i;
break;
}
}
我认为你正在寻找第二个&#39; a&#39;。
答案 3 :(得分:0)
我会为它创建一个方法,如下所示:
public static <T> int indexOfNth(List<T> list, T find, int nthOccurrence) {
if (list == null || list.isEmpty()) return -1;
int hitCount = 0;
for (int index = 0; index < list.size(); index++) {
if (list.get(index).equals(find)) {
hitCount++;
}
if (hitCount == nthOccurrence) return index;
}
return -1;
}
答案 4 :(得分:0)
以下代码段将从arraylist返回所需字符的位置。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
class Test4
{
public static int find(ArrayList<Character> obj,int index,char value)
{
int counter=0;
for(int i=0;i<obj.size();i++)
{
if(obj.get(i)==value)
{
counter++;
if(counter==index)
{
return i+1;
}
}
}
return -1;
}
public static void main(String[] args) {
ArrayList<Character> charList = new ArrayList<Character>(Arrays.asList('s', 'h','a','r','a','n'));
// The following parameters to method find are as find the position of second character 'a' in the ArrayList
System.out.println(find(charList,2,'a'));
}
}
如果角色不存在,则返回-1。
答案 5 :(得分:0)
public static int indexOf(List<Object> tokens, int n, Object obj) {
int times = 0;
for (int i = 0; i < tokens.size(); i++) {
if (tokens.get(i) == obj && n == ++times) {
return ++i;
}
}
return -1;
}