一。 lambda表达式
参考 https://www.cnblogs.com/franson-2016/p/5593080.html
package com.mytest.java8; import java.util.Arrays; import java.util.IntSummaryStatistics; import java.util.List; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.stream.Collectors; /** * @author zhangc * @since 2019/1/25 10:39 * java 双冒号 * 用法: 遍历, 匿名内部类 * java stream * filter 可以过滤内容 * limit 可以限制条数 * sort 可以帮助排序 * min,max 最大最小,类似比较 * map 可以指定处理如String转int ,或者指定要用的字段如Person::age * collect 收集信息,如把一个list 用逗号关联 * summaryStatistics 可以统计一组数字:最大最小平均总和等 **/ public class Colon { public static void main(String[] args) { List<String> a1 = Arrays.asList("a","b","c","d"); a1.forEach(x -> printValur(x)); Consumer<String> consumer = Colon::printValur; a1.forEach(x -> consumer.accept(x)); a1.forEach(System.out::println); new Thread(new Runnable() { @Override public void run() { System.out.println("run"); } }).start(); new Thread(()->{ System.out.println("run"); System.out.println("run1"); }).start(); // ()-> 相当于new+方法参数 和 方法实现 String[] pl = new String[]{"fds","fds","121","1211111","1233","dkk"}; //Arrays.sort(pl,(String x,String x1)->(x.compareTo(x1))); //Arrays.asList(pl).forEach(x-> System.out.println(x)); Arrays.sort(pl,Comparable::compareTo); Arrays.asList(pl).forEach(x-> System.out.println("张"+x)); Predicate<String> p1 = (p)->p.length()<5; Arrays.asList(pl).stream().filter(p1).limit(3).forEach(x-> System.out.println("filter"+x)); String[] p2 = new String[]{"fds","fds","121","1211111","1233","dkk"}; Arrays.asList(p2).stream().sorted(Comparable::compareTo).forEach(x->System.out.println("so"+x)); String dou = Arrays.asList(p2).stream().sorted(Comparable::compareTo).map(String::toString).collect(Collectors.joining(",")); System.out.println(dou); List<Integer> sta = Arrays.asList(1,2,3,4,5); IntSummaryStatistics ins = sta.stream().mapToInt((x)->x).summaryStatistics(); System.out.println(ins.getAverage() + ":" + ins.getCount() +":" + ins.getSum()+":"+ins.getMax()); } public static void printValur(String str) { System.out.println("print value : " + str); } }
二: 接口新加 默认方法和静态方法
public interface IterA{
/**
* 好好的接口为什么要加个默认方法呢(你是不是也有这个疑问,网上只说java8新增了哪些功能不说为什么的,送个呵呵给他们)?
* 网上查了下: 1. 如果我有很多类实现了这个接口,那么我想往这个接口加个方法,岂不是所有实现类都要改一下,想想就不美好啊。(可是我有个疑问,接口不就是这个功能吗:抽象定义,实现类必须实现。)
* 2. 写一些默认方法,实现类就可以直接用或者选择复写。 so, 这不是继承吗?表示要疯了
* 忽然看到网上说实现接口A 和接口B ,如果A 和 B 有同样的方法,则实现类需要复写该方法。 那如果有不同的方法呢,那是不是说A B 的默认方法都可以被实现类使用。原来如此:这是多继承啊。。
* 整了半天 这是java 通过接口的方式 变相的支持了多继承(但是注意静态方法是不会被继承的,还是老老实实用接口.静态方法调用)。
*/
default void aa(){ } static void sm(){ System.out.println("12"); } }
3. 双冒号方法引用
如 ClassA::new 含义就是 new ClassA()
ClassA::methodA 含义是 调用 ClassA.mothedA() 如何mothedA 不是静态方法,那就是调用实例的方法
classA:methodA 就是调用 calssA.methodA();
注意这种方式 只能是在 支持lambda 的地方使用。如 forEach( 这里使用)。
4. 元空间: 替代永久代,不在虚拟机中。