具有一个ArrayList,其数据如下所示。我的要求是找到数据长度为4的所有索引。
values.add("1000");
values.add("10001111");
values.add("45678901");
values.add("1111");
values.add("22222222");
values.add("2222");
values.add("33333333");
答案 0 :(得分:1)
您需要:
Workable demo
:使用Streams
可以内联解决方案以获得List
或int[]
List<Integer> indexes = values.stream().filter(s -> s.length() == 4)
.map(values::indexOf)
.collect(Collectors.toList());
int[] indexesArray = values.stream().filter(s -> s.length() == 4)
.mapToInt(values::indexOf)
.toArray();
Workable demo
::使用经典的for loop
List<Integer> indexes = new ArrayList<>();
for(int i=0; i<values.size(); i++){
if(values.get(i).length() == 4){
indexes.add(i);
}
}
答案 1 :(得分:0)
遍历Map<Integer, String>
并随后输出该values
的内容时,可以将匹配的值及其索引/索引存储在Map
中:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test {
public static void main(String[] args) {
List<String> values = new ArrayList<String>();
values.add("1000");
values.add("10001111");
values.add("45678901");
values.add("1111");
values.add("22222222");
values.add("2222");
values.add("33333333");
// create a storage structure for index and value
Map<Integer, String> valuesWithLengthFour = new HashMap<Integer, String>();
// iterate over your list in order to get all the matching values and indexes
for (int i = 0; i < values.size(); i++) {
String value = values.get(i);
if (value.length() == 4) {
valuesWithLengthFour.put(i, value);
}
}
System.out.println("The following matching values were found in \"values\":");
// print out the content of the storage structure
for (int key : valuesWithLengthFour.keySet()) {
System.out.println("Index: " + key + ", Value: " + valuesWithLengthFour.get(key));
}
}
}
有多种方法可以实现这一目标...对于一个班轮,请尝试在问题下方的注释之一中说明的@Lino代码。
答案 2 :(得分:0)
您可以创建索引的IntStream
:
IntStream allIndices = IntStream.range(0, values.size());
然后您可以根据提供的条件进行过滤:
IntStream filteredIndices = allIndices.filter(i -> values.get(i).length() == 4);
最后,您可以将这些索引转换为您喜欢的任何dataStructure。
一个数组:
int[] indices = filteredIndices.toArray();
或列表
List<Integer> indices = filteredIndices.boxed().collect(Collectors.toList());
作为一个陈述:
int[] indices = IntStream.range(0, values.size())
.filter(i -> values.get(i).length() == 4)
.toArray();