Java 使用增强的for循环搜索LinkedList
所以我试图用一个增强的for循环替换for循环,但我无法让它工作,问题是它确实在搜索,当它找到我要找的名称时,它返回INX-1。使用normal for循环,它返回正确的索引。n是传递给方法的字符串,array是linkedlistJava 使用增强的for循环搜索LinkedList,java,for-loop,linked-list,Java,For Loop,Linked List,所以我试图用一个增强的for循环替换for循环,但我无法让它工作,问题是它确实在搜索,当它找到我要找的名称时,它返回INX-1。使用normal for循环,它返回正确的索引。n是传递给方法的字符串,array是linkedlist boolean found= false; for(O o: array) { if(o.getString().equals(n)) { System.out.println("\n"+n+ " is found a
boolean found= false;
for(O o: array) {
if(o.getString().equals(n)) {
System.out.println("\n"+n+ " is found at position " +array.indexOf(name)+"\n");
found = true;
}
}
for (int i = 0; i<array.size();i++) {
if((array.get(i).getString()).equals(n)) {
System.out.println("\n"+n+ " is found at position " +i+"\n");
found = true;
}
}
boolean-found=false;
for(O:array){
如果(o.getString().equals(n)){
System.out.println(“\n”+n+”位于“+array.indexOf(name)+“\n”)位置;
发现=真;
}
}
对于(inti=0;i你应该使用数组。indexOf(o)索引是有点间接的,因为indexOf
需要整个o对象;可选的更容易。array.indexOf(n)
应该是array.indexOf(o)
Optional foundO=array.stream().findAny(o->n.equals(o.getString());
int index=foundO.mapToInt(o->array.indexOf(o)).orElse(-1);
System.out.println(“\n”+n+”位于位置“+index+”\n”);
正如您所见,较新的Stream API不再需要某些for/forEach循环。如果您需要索引,请不要使用增强的for循环。@Eran啊,您是说这是不可能的,或者说这只是浪费时间。在这种情况下,试图找出它,您始终可以添加一个int变量来跟踪当前索引,但在d中没有意义这样做,因为常规for循环已经为您提供了索引。请注意,使用indexOf
将再次执行搜索。另外,name
从何而来?您正在查找n
!@realponsign对不起,name是n我刚才键入的是速记
Optional<O> foundO = array.stream().findAny(o-> n.equals(o.getString()));
int index = foundO.mapToInt(o -> array.indexOf(o)).orElse(-1);
System.out.println("\n"+n+ " is found at position " +index+"\n");