过滤数组列表或列表中的自定义对象[重复]
Posted
技术标签:
【中文标题】过滤数组列表或列表中的自定义对象[重复]【英文标题】:Filter Custom Objects in Array list or List [duplicate] 【发布时间】:2018-07-10 10:00:27 【问题描述】:我在数组 List 中有 50 个自定义类(类名:学生)对象。
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 中过滤学生年龄。我从上个月开始学习android。除了在互联网上循环数组列表以实现相同的目的之外,我没有得到任何答案。
【问题讨论】:
除了循环数组列表之外的任何最快方法 ...显然,使用自定义谓词,如果不迭代所有元素就无法过滤 【参考方案1】:您使用 Lightweight-Stream-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<Student> filteredList = Stream.of(yourInputStudentList).filter(new Predicate<String>()
@Override
public boolean test(Student item)
return item.getAge().equals("20");
).collect(Collectors.toList());
拉姆达:
import com.annimon.stream.Stream;
import com.annimon.stream.function.Predicate;
..............
List<Student> filteredList = Stream.of(yourInputStudentList).filter(item-> item.getAge().equals("20")).collect(Collectors.toList());
【讨论】:
你好兄弟。我收到此错误“java.lang.ClassCastException:java.util.stream.Collectors$CollectorImpl 无法转换为 com.annimon.stream.Collector”。当我使用你的第一个选项时。 请导入 com.annimon.sream.Collector 删除 import java.util.stream.Collectors 然后添加 import com.annimon.stream.Collector。【参考方案2】:你可以使用retrolambda库来获取Java 8 stream类似的功能:
List<Student> 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
【讨论】:
顺便说一句:年龄不应该是字符串,而是整数?不过题外话了。 它说“无法解析方法'stream(java.util.List以上是关于过滤数组列表或列表中的自定义对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章