Java基础 集合的一些常用操作(筛选)
前言
通常我喜欢将集合分成两种来对待。一种是内置对象包装类作为元素的集合,另一种则是自定义对象作为元素的集合。(事实上在操作原理上没什么区别,但是具体到代码的话,写法可以有多种)。
集合的筛选
我们以list为例(set操作与list基本类似):
内置对象包装类的操作
List<String> arrayList = new ArrayList<>();
arrayList.add("a");
arrayList.add("b");
arrayList.add("c");
arrayList.add("a");
我们想做一个筛选的话,我们想得到一个不包含a的数组
List<String> fNewArrayList = new ArrayList<>();
for (String item : arrayList) {// 当然你也可以用remove,但是那个还要修改元素指针
if (!"a".equals(item)) {
fNewArrayList.add(item);
}
}
System.out.println("方法1 FNewArrayList输出结果:" + fNewArrayList);
Java8以后,我们有了其他的选择,下面是利用lambda和stream来做的筛选
List<String> lArrayList = arrayList.stream().filter(item -> !"a".equals(item)).collect(Collectors.toList());
System.out.println("方法2 LArrayList输出结果:" + lArrayList);
结果是相同的,至于更喜欢哪种方法,就看诸君喜欢哪种了。
自定义对象的操作
如果是自定义对象集合,其实操作起来区别也不是很大。我们以一个简单地学生类来进行试验。
public class Student{
private int id;
private String name;
private String score;
public Student(){
}//一个空的构造方法
public Student(Map<String,String> stuInfoMap){
this.id =Integer.valueOf(stuInfoMap.get("id"));
this.name=stuInfoMap.get("name");
this.score=stuInfoMap.get("score");
}//带参数的构造方法
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
简单地填充一组数据:
List<Student> stuList = new ArrayList<>();
for (int i = 0; i <= 4; i++) {
Map<String, String> stuInfo = new HashMap<>();
stuInfo.put("id", "123" + i);
stuInfo.put("name", "李三" + i);
stuInfo.put("score", String.valueOf(i));
Student stu = new Student(stuInfo);
stuList.add(stu);
}
System.out.println(JSONObject.toJSONString(stuList));
打印结果:
筛选出分数小于3的学生:
首先是for循环:
List<Student> fStuList = new ArrayList<>();
//TODO 对FstuList判空操作
for (Student item : stuList) {// 同理你也可以用remove,但是那个还要修改元素指针
if (3 > item.getScore()) {
fStuList.add(item);
}
}
System.out.println("方法1 FstuList输出结果:" + JSONObject.toJSONString(fStuList));
打印结果:
然后我们再看看lambda写法:
// TODO 对stuList判空
List<Student> lStuList = stuList.stream().filter(item -> 3 > item.getScore()).collect(Collectors.toList());
System.out.println("方法1 LstuList输出结果:" + JSONObject.toJSONString(lStuList));
打印结果: