我的代码是:
ArrayList<People> people = new ArrayList<>();
// people.add(...);
// people.add(...);
for (int i = 0; i < people.size(); i++) {
if (people.get(i) > 60.0)
System.out.println(people.get(i).toString());
}
我收到以下警告:
&#39;对于&#39;循环可以替换为&#39; foreach&#39;
我应该如何使用foreach修改循环?
感谢。
答案 0 :(得分:12)
名为people
的列表通常包含Person
个对象。
这里有一些示例代码,展示了如何使用for-each循环:
public class Demo {
private static class Person {
public int age;
public String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
}
public static void main(String... args) {
// Create and populate a list of people with individuals
List<Person> people = new ArrayList<>();
people.add(new Person(32, "Fred"));
people.add(new Person(45, "Ginger"));
people.add(new Person(66, "Elsa"));
// Iterate over the list (one person at a time)
for (Person person : people) {
if (person.age > 60) {
System.out.println("Old person: " + person.name);
}
}
}
}
您还可以阅读Oracle Java documentation about for-each loops。
一般形式是:
for (Person person : people) {
...
}
而不是:
for (int i = 0; i < people.size(); i++) {
Person person = people.get(i);
...
}
通常建议使用for-each,因为它很简单。 但是,如果您需要知道必须使用的项目的索引号 原始for循环或增加for-each内的计数器。
答案 1 :(得分:2)
for(People objPeople : people){
//Loop's code
}
官方文件here
答案 2 :(得分:2)
people.get(i) retrun an object of class People.
您无法将对象与if语句中的数字进行比较。
修改强>
如何迭代Arraylist
1)
for (int i = 0; i < people.size(); i++) {
if(people.get(i).getAvalue() > 60.0 ){//your code}
}
2)
for(People p: people){
if(p.getAvalue()>60.0){//you code}
}
答案 3 :(得分:1)
您可以使用以下内容替换该循环:
ArrayList<People> peopleList = new ArrayList<>();
for(People people:peopleList)
{
Do something
}
答案 4 :(得分:0)
我发现以后更容易理解for循环。在代码之前添加此注释以仅禁用此案例的检查。
//noinspection ForLoopReplaceableByForEach
for (int i = 0; i < people.size(); i++) {
Person person = people.get(i);
...
}
答案 5 :(得分:0)
当然它是可替换的,但我不明白Lint看到的“旧学校循环”有什么问题。它有两种作用。
似乎是宗教信仰:
“所以什么时候应该使用for-each循环?任何时候都可以。它真的美化了你的代码。” (https://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html)
答案 6 :(得分:0)
正如其他答案中所提到的,比较必须针对某个人的某些属性(年龄?)。
假设您进行了比较修复,for循环的流版本可能如下所示:
people.stream()
.filter(p -> p.getAge() > 60.0)
.forEach(p -> System.out.println(p.toString());