- compare表达式
要实现compareTo,其类必须包含Comparable接口
只有一个抽象方法的接口叫函数式接口
例Recrangle.java
[qzdypre]
public class Recrangle implements Comparable<Recrangle> {
private double w;
private double h;
public Recrangle(double w, double h) {
this.w = w;
this.h = h;
}
public double area(){
return w*h;
}
public double perimeter(){
return 2*(w+h);
}
@Override
public int compareTo(Recrangle o) {
double cur=this.area();
double another=o.area();
return Double.compare(cur,another);
}
public static void main(String[] args){
Recrangle r1=new Recrangle(5,6);
Recrangle r2=new Recrangle(9,4);
System.out.println(r1.compareTo(r2));
}
}
[/qzdypre]
此处double类包含Comparable接口
compareTo只有一个显式参数,另外一个对象为隐式对象(调用此接口的)
Comparator接口有两个显式参数
2.lambda表达式组成
形如以下:
[qzdypre]
[/qzdypre]
左边 -> 右边
-> 被称为lambda操作符或箭头操作符
左边:lambda形参列表(其实就是接口中的抽象方法的形参列表)
右边:lambda体 (其实就是重写的抽象方法的方法体)
3.foreach循环(复习)
[qzdypre]
for(数据类型 变量 : 集合名称){
//代码句子
}
[/qzdypre]
数据类型:该类型必须与集合中数据元素的类型一致;
变量:声明一个新的局部变量,其作用域限定在循环语句块内;
集合名称:这里可以是一个数组、集合的名称。
4.迭代器:Iterable接口(包含在lang中,不需要导入)
实例代码Student.java
[qzdypre]
import java.util.Iterator;
public class Student implements Iterable<String>{
private int id;
private String name;
private int age;
private String gender;
public Student(int id, String name, int age, String gender) {
this.id = id;
this.name = name;
this.age = age;
this.gender = gender;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getGender() {
return gender;
}
public void setAge(int age) {
this.age = age;
}
public static void main(String[] args) {
Student stu=new Student(990101,"Alice",20,"female");
for(String p:stu){
System.out.println(p);
}
}
@Override
public Iterator<String> iterator() {
return new MyIterator();
}
private class MyIterator implements Iterator<String>{
private int i=-1;
private String[] props={"id","name","age","gender"};
@Override
public boolean hasNext() {
if(++i<4){
return true;
}else{
return false;
}
}
@Override
public String next() {
return props[i];
}
}
}
[/qzdypre]
此处line47中调用了Iterator接口,此接口有两个方法分别是
[qzdypre]
@Override
public boolean hasNext() {
if(++i<4){
return true;
}else{
return false;
}
}
@Override
public String next() {
return props[i];
}
}
[/qzdypre]
hasNext和next方法(接口内的抽象方法默认就是public abstract,所以此处方法前的修饰符做了省略,即66行boolean前的修饰符和74行E前的修饰符为public abstract,只不过是省略了)
- E next():返回迭代的下一个元素。
- boolean hasNext():如果仍有元素可以迭代,则返回 true。
此处实例中返回true值的条件是++i<4,即返回props数组内的前四个(0,1,2,3)索引值。
当hasNext()方法返回false时(此处实例为i>=4时),就跳出接口,结束程序!
文章评论