匿名内部类
适用于那些只需要使用一次的类,例如现在存在一个接口,该接口里的方法只会被使用一次,按传统的做法就是专门写一个实现类来重写接口里的方法,这时会显得过于复杂且会生成这个类的.class文件;通过匿名内部类就能简化编程且不会生成.class文件
基础语法
new 需要实现的接口() | 父类构造器()
{
//需要实现的方法或重载父类的方法
}
public class HelloWorld
{
static void info(Programmer programmer)
{
programmer.listLanguages();
programmer.introduceMyself();
}
public static void main(String[] args)
{
info(new Programmer(){
public void listLanguages() {
System.out.println("Objective-C Swift Python Go Java");
}
public void introduceMyself() {
System.out.println("My Name is Jiaming Chen");
}
});
}
}
lambda表达式
匿名内部类实现方式排序
list.sort(new Comparator<String>(){
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
lambda实现排序
list.sort((s1, s2)->s1.compareTo(s2));
Stream Api
stream支持串行和并发操作,并发操作使用的是fork/join模式,通过stream api来对集合执行并发操作
//先对集合进行过滤
List<String> array = stream.filter(User::isVip).sorted((t1, t2) -> t2.getBalance() - t1.getBalance()).limit(3).map(User::getUserID).collect(Collectors.toList());
注意map和flapMap,map是针对单集合,flatmap是针对嵌套集合的,flatmap可以对流进行扁平化
Stream<List<Integer>> inputStream = Stream.of(Arrays.asList(1), Arrays.asList(2, 3), Arrays.asList(4, 5, 6));
List<Integer> integerList = inputStream.flatMap((childList) -> childList.stream()).collect(Collectors.toList());
通过flatmap来拆分成一个集合,然后再对那个集合进行流化
fork/join模式