Java8新特性 1——利用流和Lambda操作集合

原创 2016年05月31日 22:17:44

Java8中可以用简洁的代码来操作集合,比如List,Map,他们的实现ArrayList。以此来实现Java8的充分利用CPU的目标。

流和Lambda表达式都是Java8中的新特性。流可以实现对集合的遍历,过滤,聚合,求和以及求平均值等操作。文章力求好懂的基础上写得简洁,达到看完就能用的效果。

1:利用流和Lambda来遍历集合

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        List<People> peoples=new ArrayList<People>();
        peoples.add(new People("爱因斯坦", 100));
        peoples.add(new People("牛顿", 80));
        //stream()方法得到一个流
        peoples.stream()
                .forEach(p->{System.out.println(p.getName());});
    }
}

class People{
    private String name;
    private Integer age;

    public People(String name, Integer age) {
        super();
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}

输出如如下:

因斯坦
牛顿
霍金

2:利用流对集合进行过滤

过滤选取70岁以上的科学家

Predicate<People> predicate=p->p.getAge()>70;
peoples.stream()
       .filter(predicate)
       .forEach(p->{System.err.println(p.getName());});

输出结果如下:

爱因斯坦
牛顿

3:利用流对集合进行聚集

long len=peoples.stream()
               .count();
        System.out.println(len);

输出

3

4:利用流对集合进行求和

long sum=peoples.stream()
               .mapToInt(p->p.getAge())
               .sum();
        System.out.println(sum);

输出
230

5:利用流对集合求平均值

因为求平均值会出现除数为0的情况,所以返回值是Optional

OptionalDouble sum=peoples.stream()
               .mapToInt(p->p.getAge())
               .average();
        if(sum.isPresent())
            System.out.println(sum.getAsDouble());
        else {
            System.out.println("error");
        }

输出如下;

76.66666666666667

6:利用流操作数组

可以利用Arrays.stream()方法得到一个stream或者用Stream.of()得到Stream对象,后面的操作和上面讲解的一样操作。

//操作数组
            People[] peoples2={new People("爱因斯坦", 100),new People("牛顿", 80),new People("霍金", 50)};
        //Stream<People> stream=Stream.of(peoples2);
        Stream<People> stream=Arrays.stream(peoples2);
        stream.forEach(p->System.out.println(p.getName()));

输出;

爱因斯坦
牛顿
霍金

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Stream Java8的集合类利器——走进Java Lambda(二)

通过前面的例子,相信你已经对Lambda表达式有了一个初步了解了,前一篇主要是属性Lambda的语法,这篇我们继续。 Java8做了很多改进,以便我们少写点代码。接下来我们就来稍微了解一下,JDK自带...
  • lsmsrc
  • lsmsrc
  • 2014-11-14 16:10
  • 7838

[Java 8] (2) Lambda在集合中的使用

Lambda在集合中的使用 列表的遍历 提起对于集合的遍历,恐怕下面的这种方式已经是一种思维定式了吧: final ListString> friends = Arrays.asList("Br...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

JDK8----集合之流式(Streams)操作

JDK8 —- 集合之流式(Streams)操作 为什么需要 Stream   Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 Output...

JDK8的集合流式操作

一. 基本概念 1.1 为什么加入 集合的流式操作              JDK8 的Stream 是一个受到 函数式编程 和 多核时代影响而产生的东西。很多时候我们需要到底层返回数据,上层...

Java8中使用filter()过滤列表,使用collect将stream转化为list

Reference: https://www.mkyong.com/java8/java-8-streams-filter-examples/ /* In Java 8, using st...

Java1.8新特性关于lambda表达式与Stream流的使用以及对集合的实用操作

Java8从发布到现在已经很久了,慢慢的也开始了被广泛使用,不得不说java8的一大亮点是lambda表达式以及Stream,它将函数式编程的思想很好的融入到了java当中,使得我们的java更加的强...

JavaSE8新特性——lambda表达式1

广义上,带有参数变量的表达式都被称为lambda表达式。java中lambda表达式是一段可以传递的代码。它可能不会被立即执行。 java中类似lambda代码块的常见方式: 线程的run代码块 比...

Java8新特性——lambda表达式

今天是高考的日子,是大四师兄师姐答辩毕业的日子。一代又来,一代又去。好久没写博客,借此特殊日子整理一下前不久学java8新特性时写的代码,留下痕迹。(本博客的代码根据 java8新特性教程 学习整理,...

Java8新特性——Lambda表达式(一)

1. 预备知识在了解Lambda表达式之前首先需要了解以下预备知识。1.1 如何成为一名高级码农?如果老板让你写一个用于毁灭地球的函数,而你写了一个毁灭行星的函数,若要毁灭地球只需将毁灭地球的过程传递...

Java 8 新特性:Lambda 表达式 ——诺诺"涂鸦"记忆

Lambda 表达式 一.为什么Java 需要Lambda 表达式? 二.函数式接口 三.Lambda表达式 四.函数式通用接口的出现 …………
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)