代码样例:
1 遍历集合
List<String> list = Arrays.asList("apple", "banana", "orange");
list.forEach(System.out::println);
// 等同于
list.forEach(s -> {
System.out.println(s);
});
2 排序
List<String> list = Arrays.asList("apple", "banana", "orange");
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.length() - o2.length();
}
});
// 根据字典序简写方式
Collections.sort(list, (o1, o2) -> o1.compareTo(o2));
list.forEach(System.out::println);
Comparator<String> comparing = Comparator.comparing(String::length, Comparator.reverseOrder()).thenComparing(Comparator.reverseOrder());
Collections.sort(list, comparing);
list.forEach(System.out::println);
3 过滤 filter
List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> list3 = list.stream().filter(s -> s.startsWith("a")).collect(Collectors.toList());
list3.forEach(System.out::println);
4 map 对集合中的元素 进行转化:这里String 转成了Integer: 取出长度, distinct() 去重
List<String> list = Arrays.asList("apple", "banana", "orange");
List<Integer> list4 = list.stream().map(String::length).distinct().collect(Collectors.toList());
list4.forEach(System.out::println);
5 流式处理
List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> list44 = list.stream().filter(s -> s.startsWith("a")).map(String::toUpperCase).collect(Collectors.toList();
List<String> list444 = list.stream().map(s -> {
if (s.startsWith("a")) {
return s.toUpperCase();
}
return s;
}).collect(Collectors.toList());
list44.forEach(System.out::println);
list444.forEach(System.out::println);
6 规约
List<Integer> list5 = Arrays.asList(1, 2, 3, 4, 5, 6);
int sum = list5.stream().reduce(0, (o1, o2) -> o1 + o2);
System.out.println(sum);
7 分组 # collect 对集合做一个转化 这里把list转为了map
List<String> list = Arrays.asList("apple", "banana", "orange");
Map<String, List<String>> collect = list.stream().collect(Collectors.groupingBy(s -> {
return s.startsWith("a") ? s : "other";
}));
Map<Integer, List<String>> collect2 = list.stream().collect(Collectors.groupingBy(String::length));
System.out.println(collect);
System.out.println(collect2);
8 lambda其他用法
interface MyInterface {
public void doSomeThing(String s);
}
MyInterface myInterface = new MyInterface() {
@Override
public void doSomeThing(String s) {
System.out.println(s);
}
};
myInterface.doSomeThing("常规创建");
MyInterface myInterface2 = System.out::println;
myInterface2.doSomeThing("lambda 创建");
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("创建了线程");
}
});
thread.start();
Thread thread1 = new Thread(() -> {
System.out.println("lambda表达式创建了线程");
});
thread1.start();
9 lambda 判空处理 Optional
String s = "Hello world";
if (s != null) {
System.out.println(s.toUpperCase());
}
String ss = Optional.ofNullable(s).map(String::toUpperCase).get();
System.out.println("Optional 处理 " + ss);