linux載入環境變數和檔案頭
阿新 • • 發佈:2021-12-14
一、功能介面
Java 8 引入了@FunctionalInterface,一個只有一個抽象方法的介面。編譯器會將任何滿足函式式介面定義的介面視為函式式介面;
這意味著@FunctionalInterface註釋是可選的。
讓我們看看六個基本的功能介面。
介面 | 簽名 | 示例 |
---|---|---|
UnaryOperator |
T apply(T t) | String::toLowerCase, Math::tan |
BinaryOperator |
T apply(T t1, T t2) | BigInteger::add, Math::pow |
Function<T, R> | R apply(T t) | Arrays::asList, Integer::toBinaryString |
Predicate<T, U> | boolean test(T t, U u) | String::isEmpty, Character::isDigit |
Supplier |
T get() | LocalDate::now, Instant::now |
Consumer |
void accept(T t) | System.out::println, Error::printStackTrace |
二、 Lambda 表示式和方法參考
Java 8 引入了 lambda 表示式來提供函式介面的抽象方法的實現。
public interface Iterable
//...
default void forEach(Consumer<? super T> var1) {
Objects.requireNonNull(var1);
Iterator var2 = this.iterator();
while(var2.hasNext()) {
Object var3 = var2.next();
var1.accept(var3);
}
}
//......
}
使用Collections.sort示例
新建一個Student類,然後根據id進行排序
@Data
public class Student {
private Integer id;
private String name;
private String age;
使用Collections.sort進行排序
public List<Student> getStudents(){
List<Student> result = new ArrayList<>();
result.add(new Student(1,"小易","21"));
result.add(new Student(2,"小二","23"));
result.add(new Student(4,"小思","24"));
result.add(new Student(3,"小三","24"));
return result;
}
@Test
public void ComparatorTest(){
List<Student> listStudent = getStudents();
for (Student student : listStudent) {
System.out.println("使用for迴圈遍歷出來"+student);
}
System.out.println("========================");
Collections.sort(listStudent, new Comparator<Student>() {
@Override
public int compare(Student t1, Student t2) {
return t1.getId() - t2.getId();
}
});
System.out.println(listStudent);
}
使用Lambda 簡化Collections.sort開發
List介面sort直接支援該方法,不再需要使用Collections.sort
@Test
public void LambdaComparatorTest(){
List<Student> listStudent = getStudents();
for (Student student : listStudent) {
System.out.println("使用for迴圈遍歷出來"+student);
}
System.out.println("========================");
listStudent.sort(new Comparator<Student>() {
@Override
public int compare(Student t1, Student t2) {
return t1.getId() - t2.getId();
}
});
System.out.println(listStudent);
}
使用Lambda列印
@Test
public void LambdaComparatorTest(){
System.out.println("=========== for迴圈遍歷 =============");
List<Student> listStudent = getStudents();
for (Student student : listStudent) {
System.out.println("使用for迴圈遍歷出來"+student);
}
System.out.println("=========== lambda =============");
//lambda
listStudent.sort((Student t1,Student t2)->t1.getId() - t2.getId());
System.out.println(listStudent);
System.out.println("=========== 在forEach使用lambda 列印 =============");
//lambda也支援print列印
listStudent.forEach((student -> {System.out.println(student);}));
}
這一段可以更簡化:listStudent.sort((Student t1,Student t2)->t1.getId() - t2.getId());
如下:簡化了很多,但是缺點別人接手你的程式碼 如果很多程式碼使用lambda有一定難度消化(我以前就是)
listStudent.sort((t1,t2)->t1.getId() - t2.getId());
按名稱排序
listStudent.sort((Student t1,Student t2)->t1.getName().compareTo(t2.getName()));
待更新