JAVA中的1.8新特性-质问老程序员你确定你看得懂java代码吗?

简介

java8于2014年发布,相比于java7,java8新增了非常多的特性,如lambda表达式、函数式接口、方法引用、默认方法、新工具(编译工具)、Stream API、Date Time API、Optional等 。 当前很多公司的老产品依然使用的java7,甚至开发人员开发新产品时依然没有选择升级,写关于java8系列文章的目的在于梳理和分享java8新增的主要特性,开发时也可以用作参考 lambda表达式是java8新增的主要特性之一,lambda表达式又称闭包或匿名函数,主要优点在于简化代码、增强代码可读性、并行操作集合等。至于是否使用,有的同学觉得不适应,有的同学欲罢不能,见仁见智~




函数式接口

特点:之后一个抽象方法的接口可以被叫做函数式接口 如:Runnable 接口 里面就一个Run 方法

特性:

1、无参数,返回值1() -> 1
2、无参数,无返回值() -> System.out.print("Java8 lambda.");//3、1个参数,参数类型为数字,返回值为其值的5倍x ->  5 * x
42个参数,参数类型均为数字,返回值为其差值(x, y) -> x - y
52个参数,指定参数类型均为int型,返回值为其差值 (int x, int y) -> x - y  
61个参数,指定参数类型为String ,无返回值(String str) -> System.out.print(str)
提示:如果加了大括号返回值必须要加上 return  没加大括号就直接书写对应的参数即可,但是只能有一行代码 如果是多行代码必须要加上大括号
代码
public class LambdaExpressionDemo {
    public static void main(String[] args) {
        //启动线程 实现了一种函数式接口
        new Thread(()->{
            for(int index=1;index<=10;index++){
                System.out.println(index);
            }
        }).start();

        //设置自定义函数式接口
        MyLambda lambda = (value ) -> {
            System.out.println("内部那个");
            return value;
        };
        String value= ExpressionDemo.prite((String value2)->value2);
        System.out.println(value);
    }
    static class ExpressionDemo{
        public  static String prite(MyLambda lambda){
            return lambda.test1("刘梓江");
        }
    }
}
//函数式接口
interface  MyLambda{
    public  String test1(String value);
}



使用 foreach 方式遍历集合

特点:替代了for(xx:xx)的方式
List<String> list=new ArrayList<>();
list.add("123");
list.add("123");
list.add("123");
list.add("123");
list.add("123");
list.forEach((n)->{
      System.out.println(n);
});
提示: lambda表达式可以使用方法引用,当且仅当主体中不修改lambda表达式提供的参数 不过不建议使用方法引用因为可读性差
如:
features.forEach(n -> System.out.println(n));
等价于
features.forEach(System.out::println);

,
,
,
,
,
,
,

Stream 流的使用
流的转换
数组转换流
	Integer [] array={3,3,5,56,7,8,8,9,923,1};
	Arrays.stream(array)

集合转换流   
	List<String> myList=new ArrayList<>();
	myList.add("刘梓江");
	myList.add("彭学明");
	myList.add("余烨");
	myList.stream();

map转换流
	Map<Object, Object> objectObjectMap = Collections.synchronizedMap(new HashMap<>());
	objectObjectMap.put("2",2);
	objectObjectMap.put("3",3);
	objectObjectMap.put("1",1);
	objectObjectMap.put("4",4);
	objectObjectMap.put("5",51);
	objectObjectMap.put("6",61);
	objectObjectMap.entrySet().stream();

,
,
,

Stream流下的一些常用方法
   filter :参数是一个函数式接口 里面是一个有返回值的方法 返回值类型就是boolan 参数就是集合元素
               当拿到集合元素做判断 如果符合判断返回true 流就会将当前元素给保留 不符合就会过滤掉
   map :   参数是一个函数式接口 将当前中各个元素进行物理上的修改
   sorted: 对当前流下的内容进行显示排序
   collect: 将当前内容转换成集合
//List集合操作
List<String> myList=new ArrayList<>();
myList.add("刘梓江");
myList.add("彭学明");
myList.add("余烨");


List<String> collect = myList.stream()
.filter(e->{return !e.equals("刘梓江");})
.map(n -> {
    return n + "123";
}).collect(Collectors.toList());
System.out.println(collect.toString());

结果
在这里插入图片描述




//map的操作
Map<Object, Object> objectObjectMap = Collections.synchronizedMap(new HashMap<>());
objectObjectMap.put("2",2);
objectObjectMap.put("3",3);
objectObjectMap.put("1",1);
objectObjectMap.put("4",4);
objectObjectMap.put("5",51);
objectObjectMap.put("6",61);


Map<Object, Object> newMap = objectObjectMap.entrySet()
.stream()
//过滤map中的元素信息 返回布尔值
.filter(e -> {
    return (int) e.getValue() < 5;
})
//对map中的内容修改  返回当前修改后的map对象
.map(e -> {
    if (e.getKey().equals("4")) {
        e.setValue(99);
        System.out.println("修改成功");
    }
    return e;
})
//对map降序排序  注意排序直对当前map显示效果有效
.sorted(new Comparator<Map.Entry<Object, Object>>() {
    @Override
    public int compare(Map.Entry<Object, Object> o1, Map.Entry<Object, Object> o2) {
        return (int) o2.getValue() - (int) o1.getValue();
    }
})
//转map集合 注意当前map的显示效果与转换的内容位置没有联系
.collect(
    Collectors.toMap(
        e -> {return e.getKey();},    //设置什么是主键
        e2 -> {return e2.getValue();} //设置什么是值
    )
);
//将转换成功的map二次遍历
Set<Map.Entry<Object, Object>> entries = newMap.entrySet();
entries.forEach(e->{
    System.out.println(e.getKey()+"=="+e.getValue());
});

结果
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值