| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 开发测试 -> JDK8 学习笔记 -> 正文阅读 |
|
|
[开发测试]JDK8 学习笔记 |
JDK7try-catch 支持处理多异常try{
...; ?
}catch( Exc ? | ? Exc ){
? ?//一个catch 捕获多个异常,字节码文件跟小
}
数字类型 支持下划线int num = 123_345; float num2 = 222+33F; long num3 = 123_000_111L; switch 支持 stringswitch(){
? ?case "java":
? ? ? ?break;
? ? ? ....;
? ?default:
? ? ? ? ?break;
}
JDK8Lambda 表达式 函数式接口表示行为 传递的一种方式,代替匿名内部类 (参数)-> 函数主体 函数式接口只有一个抽象方法 @FunctionalInterface用在接口上 表示此接口会生成一个函数式接口 @FunctionalInterface
public interface aa{ String go(); }
不符合要求 编译器会报错 java自带的 函数式接口 @FunctionalInterface
public interface Predicate<T>{ boolean test(T t); }
?
public static <T> List<T> filter(List<T> list , Predicate<T> p){
? ?List<T> resuts = new ArrayLsit<>();
? ?for(T s: list){
? ? ? ?if(p.test(s)){
? ? ? ? ? ?results.add(s);
? ? ? }
? }
? ?return results;
}
?
Predicate<String> nonEmptyStringPredicate = (String s) -> !s.isEmpty();
—————————————————————————— @FunctionalInterface
public interface Consumer<T>{ void accept(T t); }
?
public static <T> void forEach(list,Consumer<T> c) {
? ?for(T i: list){
? ? ? ?c.accept(i);
? }
}
?
//Lambda 是 Consumer 中 accept方法的实现
forEach(Arrays.asList(1,2,3,4,5),(Integer i) -> System,out.println(i) );
———————————————— 类型转换 入参T 出参R @FunctionalInterface
public interface Function<T,R>{
? ?R apply(T t);
}
?
public static <T,R> List<R> map(List<T> list, Function<T,R> f){
? ?List<R> result = new ArrayList<>();
? ?for(T s:list){
? ? ? ?result.add(f.apply(s));
? }
? ?return result;
}
?
//[7,2,6]
//lambda是 Function 接口的 apply方法实现
List<Intefer> 1 =map(Arrays.asList("lambdas","in","action"),(String s)-> s.length());
—————————————————— 使用 ? ?//断言
? ?void predicate(){
? ? ? ?Predicate<String> namesStartingWithS = name -> name.startsWith("s");
? ? ? ?boolean hello = namesStartingWithS.test("Hello"); ?//false
? }
?
? ?//消费数据
? ?void consumer(){
? ? ? ?Consumer<String> messageConsumer = message -> System.out.println(message);
? ? ? ?messageConsumer.accept("Learn java8"); //Learn java8
? }
?
? ?//转换
? ?void function(){
? ? ? ?Function<String ,String> toUpperCase = name -> name.toUpperCase();
? ? ? ?toUpperCase.apply("java"); //java
? }
?
? ?//提供数据
? ?void supplier(){
? ? ? ?Supplier<String> uuidGenerator =() -> UUID.randomUUID().toString();
? ? ? ?System.out.println(uuidGenerator.get());//输出一个 UUID
? }
::构造器引用? ?//构造器引用 ? ?Supplier<FunctionalDemo> obj = FunctionalDemo :: new; ? ?FunctionalDemo f = obj.get(); 数组引用//数组引用 Function<Integer , String[]> fun = x->new String[x]; String[] strs = fun.apply(10); System.out.println(strs.length); ? Function<Integer , String[]> fun1 =String[]::new; strs = fun1.apply(10); System.out.println(strs.length); 异常,函数式接口都不运行抛出 受检异常Exception 就是受检异常 RuntimeException 如果出现这类异常,包装处理 Function<BufferedReader ,String> f = (BufferedReader b)->{
? ?try {
? ? ?return b.readLine();
? }catch (IOException e){
? ? ? ?e.printStackTrace();//输出包装栈信息
? ? ? ?throw new RuntimeException(e);
? }
};
默认方法- 接口 default
定义一个接口 interface A{
? ?int add();
? ?int deleete();
?
? ?//defaul 修饰的一个默认方法, 不需要实现类全部实现
? ?default int mod(int a,int b){
? ? ? ?return a%b;
? }
}
?
//调用, 不需要有实现类 实现default 的实现,可以直接调用
void main(){
... a = new A();
? ?int c = a.mod(a,b);
} ? ? //声明一个 空 opttiona
? ? ? ?Optional<Object> empty = Optional.empty();
?
? ? ? ?//依赖一个非空的 Optional
? ? ? ?Optional<FunctionalDemo> functionalDemo = Optional.of(new FunctionalDemo());
?
? ? ? ?//可以接收null 的 Optional
? ? ? ?Optional<FunctionalDemo> functionalDemo1 = Optional.ofNullable(new FunctionalDemo());
? ?
接口静态方法interface A{
? ?static A getA(){
? ? ? ?return new A实现类();
? }
}
?
?
Optional 干掉空指针public class UserBO{
? ?private AddUser user; ?//对象可能空指针
? ?private Optional<AddUser> optUser; //对象可以为空, 但不是null
}
?
void main(){
? ? ? ? //声明一个 空 opttiona
? ? ? ?Optional<Object> empty = Optional.empty();
?
? ? ? ?//依赖一个非空的 Optional 不会出现非空异常
? ? ? ?Optional<FunctionalDemo> functionalDemo = Optional.of(new FunctionalDemo());
?
? ? ? ?//可以接收null 的 Optional
? ? ? ?Optional<FunctionalDemo> functionalDemo1 = Optional.ofNullable(new FunctionalDemo()); ?
}
List<Project> projects = Project.buildDate(); List<String> names =projects.stream() ? .filrer(p->p.getStars()>1000) ?//筛选 star大于1000的项目 ? .map(Project::getName) ? ? ? ? //提取项目名称 ? .limit(3) ? .collect(Collectors.toList()); ?//将名称保存在List中 System.out.println(names); Steram
Stream API
CollectorsmaxBy 求最值 Optional<aa> collect = aa.stream() ? .collect(maxBy(Comparator.comparingInt(aa::getStars))); sumingInt 求和 Optional<aa> collect = aa.stream() ? .collect(sumingInt(aa::getStats)); averaginInt 求平均 Optional<aa> collect = aa.stream() ? .collect(averagingInt(Comparator.comparingInt(aa::getStars))); joining 连接字符 String.of("hello","java8")
.collect(joining("="));
//结果 hello=java8
tream 操作流创建在数据源上的,java.util.Collection 、list 集合和set集合都是数据源的一种产生的流可以是串行的,也可是并行的。通过集合类的Stream方法可以产生串行流,parallelStream 方法可以产生并行流 Stream支持的主要连续操作如下
注意:使用Stram需要关注
并行流直接list调用 parallel方法 list.stream()
.parallel()
时间日期APIDate和Calendar 不是线程安全的,需要编写额外的代码来处理线程安全问题
CompletableFuture
Map 增强改动Map <String,String> map = new HashMap<>();
map.putIfAbsent("1","a");
map.forEach((k,v) - > {
? ?System.out.println(k+v);
});
map.computeIfAbsent("2",e -> e+ "1");
map.computeIfPresent("1",(k,v) -> k+v );
?
map.remove("1" ,"a");
?
map.getOrDefault("2","b");
map.merge("1","a",(k,v) -> k+v );
底部 |
|
|
| 开发测试 最新文章 |
| pytest系列——allure之生成测试报告(Wind |
| 某大厂软件测试岗一面笔试题+二面问答题面试 |
| iperf 学习笔记 |
| 关于Python中使用selenium八大定位方法 |
| 【软件测试】为什么提升不了?8年测试总结再 |
| 软件测试复习 |
| PHP笔记-Smarty模板引擎的使用 |
| C++Test使用入门 |
| 【Java】单元测试 |
| Net core 3.x 获取客户端地址 |
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/27 3:45:11- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |