enum Address {
Beijing,
Shanghai,
Wuhan
}
class Student implements Comparable {
String name;
int age;
Address address;
public Student(String name, int age, Address address) {
this.name = name;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", address=" + address +
'}';
}
@Override
public int compareTo(Object o) {
return this.getAge() - ((Student)o).getAge();
}
}
如图,我定义了一个学生类,学生类包含名字,年龄,地址三个属性,其中地址用的是枚举,现在我想找到所有北京的学生,此时我的代码为:
public class Homework {
public static void main(String[] args) {
List<Student> list1 = Arrays.asList(
new Student("zs",18,Address.Beijing),
new Student("ls",22,Address.Shanghai),
new Student("wu",20,Address.Wuhan),
new Student("zl",24,Address.Wuhan),
new Student("kongling",23,Address.Shanghai)
);
// list1.sort(new Comparator<Student>() {
// @Override
// public int compare(Student o1, Student o2) {
// return o1.getAge() - o2.getAge();
// }
// });
// System.out.println(list1);
// Collections.sort(list1);
// System.out.println(list1);
ArrayList<Student> list2 = new ArrayList<>();
System.out.println(list1.stream().filter(new Predicate<Student>() {
@Override
public boolean test(Student student) {
return student.getAddress().equals(Address.Beijing);
}
}).collect(Collectors.toList()));
}
}
在这里我equals后面跟的是Address.Beijing,如果跟"Beijing"会报错。
另外,若想实现学生之间的有两种形式,Comparator和Comparable
如果用的是Comparator则:
package com.cskaoyan._kingshomework;
import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class Homework {
public static void main(String[] args) {
List<Student> list1 = Arrays.asList(
new Student("zs",18,Address.Beijing),
new Student("ls",22,Address.Shanghai),
new Student("wu",20,Address.Wuhan),
new Student("zl",24,Address.Wuhan),
new Student("kongling",23,Address.Shanghai)
);
list1.sort(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getAge() - o2.getAge();
}
});
System.out.println(list1);
// Collections.sort(list1);
// System.out.println(list1);
// System.out.println(list1.stream().filter(new Predicate<Student>() {
// @Override
// public boolean test(Student student) {
// return student.getAddress().equals(Address.Beijing);
// }
// }).collect(Collectors.toList()));
}
}
此时我只需使用list1返回即可
如果用的是Comparable则代码为:
public class Homework {
public static void main(String[] args) {
List<Student> list1 = Arrays.asList(
new Student("zs",18,Address.Beijing),
new Student("ls",22,Address.Shanghai),
new Student("wu",20,Address.Wuhan),
new Student("zl",24,Address.Wuhan),
new Student("kongling",23,Address.Shanghai)
);
// list1.sort(new Comparator<Student>() {
// @Override
// public int compare(Student o1, Student o2) {
// return o1.getAge() - o2.getAge();
// }
// });
// System.out.println(list1);
Collections.sort(list1);
System.out.println(list1);
System.out.println(list1.stream().filter(new Predicate<Student>() {
@Override
public boolean test(Student student) {
return student.getAddress().equals(Address.Beijing);
}
}).collect(Collectors.toList()));
}
}
enum Address {
Beijing,
Shanghai,
Wuhan
}
class Student implements Comparable{
String name;
int age;
Address address;
public Student(String name, int age, Address address) {
this.name = name;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", address=" + address +
'}';
}
@Override
public int compareTo(Object o) {
return this.getAge() - ((Student)o).getAge();
}
}
可以看到此时我使用的是Collection集合进行返回,在Student类中实现接口。