知识点记录-JAVA8常用语法特点lambda表达式
练习lambda表达式
package com.test.jdk8;
//语法格式如下:
//(parameters) -> expression
//或
//(parameters) ->{ statements; }
import java.util.*;
interface MathOperation {
int operation(int a, int b);
}
interface GreetingService {
void sayMessage(String message);
}
public class TestLambda {
final static String hello = "Hello! "; // 访问外部变量
private static int outStaticInt = 1; // 修改外部变量
public static void main(String[] args) {
final String hello1 = "Hello1! "; // 访问局部变量
int inInt = 1; // 修改局部变量异常
TestLambda testLambda = new TestLambda();
//1. 排序
List<String> names1 = new LinkedList<>();
names1.add("names1");
names1.add("names2");
List<String> names2 = new LinkedList<>();
names2.add("names2");
names2.add("names1");
System.out.println("sortUsingJava7");
testLambda.sortUsingJava7(names1);
System.out.println(names1);
System.out.println("sortUsingJava8");
testLambda.sortUsingJava8(names2);
System.out.println(names2);
List<String> names = Arrays.asList("a", "bc", "for");
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String a, String b) {
return b.compareTo(a);
}
});
printList(names);
Collections.sort(names, (String a, String b) -> {
return b.compareTo(a);
});
printList(names);
Collections.sort(names, (String a, String b) -> b.compareTo(a));
printList(names);
Collections.sort(names, (a, b) -> b.compareTo(a));
printList(names);
Collections.sort(names, Comparator.naturalOrder());
printList(names);
Collections.sort(names, Comparator.reverseOrder());
printList(names);
//2. + - * / 表达式
MathOperation add = Integer::sum;
MathOperation sub = (x, y) -> x - y;
MathOperation multiply = (x, y) -> x * y;
MathOperation divide = (x, y) -> x / y;
System.out.println(add.operation(2, 5));
System.out.println(sub.operation(2, 5));
System.out.println(multiply.operation(2, 5));
System.out.println(divide.operation(2, 5));
//3. 访问外部变量
GreetingService greetingService = s ->
{
outStaticInt = 2;
System.out.println(hello + s);
};
greetingService.sayMessage("lambda");
System.out.println("outStaticInt=" + outStaticInt);
//4. 访问局部变量
greetingService = s ->
{
// inInt = 6; // 修改局部变量异常
System.out.println(hello1 + s);
};
greetingService.sayMessage("lambda");
//访问MAP
Map<String, String> map = new HashMap<>();
for (int k = 0; k < 3; k++) {
map.put("" + k, k + "");
}
map.forEach((k, v) -> System.out.println("k=" + k + " v=" + v));
}
private static void printList(List<String> list) {
list.stream().forEach(System.out::println);
}
// 使用 java 7 排序
private void sortUsingJava7(List<String> names) {
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
});
}
// 使用 java 8 排序
private void sortUsingJava8(List<String> names) {
Collections.sort(names, (s1, s2) -> s1.compareTo(s2));
}
}