本问题已经有最佳答案,请猛点这里访问。
我在数组列表中有50个自定义类(类名:student)对象。
public class Student {
private String name;
private String age;
private String parent;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getParent() {
return parent;
}
public void setParent(String parent) {
this.parent = parent;
}
}
我要过滤年龄为20岁的学生数组列表,并将其存储到另一个数组列表中。
注:
我试过用for循环。工作正常。但我想知道有没有最快的方法,除了循环数组列表过滤学生年龄。
我在iOS方面有一些经验。在iOS中,nspredicate用于从nsarray中过滤学生年龄。我从上个月开始学安卓。除了在Internet上循环数组列表,我没有得到任何答案来实现这一点。
除了循环数组列表之外,任何最快的方法…显然,对于自定义谓词,如果不迭代所有元素,就无法进行筛选。
可以使用反LAMBDA库获得Java 8流类似的功能:
List filteredList = StreamSupport
.stream(yourInputStudentList)
.filter(item -> item.getAge() =="20")
.collect(Collectors.toList());
为此,您需要添加更新Gradle文件,如下所示:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.4.0'
classpath 'me.tatarka:gradle-retrolambda:3.2.0' // Add this
}
}
顺便问一下:年龄不应该是一个字符串,而是一个整数?不过,这是离题的。
它说"不能解决方法"流(java. U.L.List.UngEnter)。
参见stackoverflow.com/questions/45704901/…
使用轻量级流API:
dependencies {
classpath 'com.android.tools.build:gradle:1.4.0'
compile 'com.annimon:stream:1.1.2'
}
然后使用:
import com.annimon.stream.Stream;
import com.annimon.stream.function.Predicate;
import com.annimon.stream.Collector;
..............
List filteredList = Stream.of(yourInputStudentList).filter(new Predicate() {
@Override
public boolean test(Student item) {
return item.getAge().equals("20");
}
}).collect(Collectors.toList());
Lamda:
import com.annimon.stream.Stream;
import com.annimon.stream.function.Predicate;
..............
List filteredList = Stream.of(yourInputStudentList).filter(item-> item.getAge().equals("20")).collect(Collectors.toList());
嗨,兄弟。我得到这个错误"java. Lang.CassCasExtExc:Java.UTI.Studio。收藏家$CopeCurrIMPL不能被强制转换为COM.ANNIMON.Stur.C收藏品"。当我使用你的第一个选项。
请导入com.annimon.sream.collector
删除import java.util.stream.collectors,然后添加import com.annimon.stream.collector。