第六周 Java8新特性

时间:2021-06-22 17:48:49   收藏:0   阅读:0

一、Lambda表达式

Lambda表达式是一个匿名函数,即没有函数名的函数。从动态引用到动态定义,可以简化写法。

对比两种写法:
技术图片

Lambda表达式的语法如下:

(parameters) -> expression
或
(parameters) ->{ statements; }

还有如下特性:

示例:

  1. 不需要参数,返回值为5

() -> 5

  1. 接受一个参数,返回乘以2的值

x -> x*2

  1. 接受2个参数,并返回他们的差

(x,y) -> x-y

  1. 接受两个int类型的整数,返回他们的和

(int x,int y) -> x+y

  1. 接受一个String类型的参数,不返回值

(String x) -> System.out.print(x)

Java8给我们提供了一些接口,可供使用:

还有很多,都在java.util.function包里面。

示例:

//java7写法
new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println(new Date());
    }
}).start();

//java8 写法
new Thread(()-> System.out.println(new Date())).start();

二、Stream

Stream(流)是一个来自数据源的元素队列并支持聚合操作

创建Stream的几种方式:

  1. 使用数组
   String[] array={"a","b","c","d"};
   Stream<String> stream1 = Stream.of(array);
   Stream<String> stream2 = Arrays.stream(array);
  1. 使用Collections
List<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.stream();
  1. 使用Stream.generate()
 Stream<String> stream3 = Stream.generate(() -> "love").limit(10);
  1. 使用Stream.iterate()
Stream<BigInteger> bigIntStream = Stream.iterate(BigInteger.ZERO, n -> n.add(BigInteger.ONE)).limit(10);
  1. 其他API创建
Stream stream = Stream.concat(stream1, stream2);
Stream<String> wordStream = Pattern.compile("\\W").splitAsStream(sentence);

Stream操作:

中间操作:

  1. 选择与过滤
  1. 映射
  1. 排序

终止操作:

  1. 查找与匹配
  1. 规约 reduce
  2. 收集 collect
  1. 迭代

代码示例:

 public static void main(String[] args) {
        List<Integer> list=new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);

        list.stream().filter(x->x>2).forEach(System.out::println);

        list.stream().mapToDouble(x->Double.valueOf(x)).forEach((b)-> System.out.println(b));

        list.stream().flatMap(x->Arrays.stream(new Integer[]{x})).forEach(System.out::println);

        boolean flag = list.stream().anyMatch(x -> x % 3 == 0);

        long count = list.stream().count();
        System.out.println("元素个数:"+count);

        long sum = list.stream().collect(Collectors.summarizingInt(x -> x)).getSum();
        System.out.println("总元素的和是:"+sum);

        Integer integer = list.stream().reduce((a, b) -> a + b).get();
        System.out.println("规约求和:"+integer);

    }
评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!