Java 8 : Stream API 练习

//店铺属性类
public class Property {
	String  name;
    // 距离,单位:米
    Integer distance;
    // 销量,月售
    Integer sales;
    // 价格,这里简单起见就写一个级别代表价格段
    Integer priceLevel;
    public Property(String name, int distance, int sales, int priceLevel) {
        this.name = name;
        this.distance = distance;
        this.sales = sales;
        this.priceLevel = priceLevel;
    }
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getDistance() {
		return distance;
	}
	public void setDistance(Integer distance) {
		this.distance = distance;
	}
	public Integer getSales() {
		return sales;
	}
	public void setSales(Integer sales) {
		this.sales = sales;
	}
	public Integer getPriceLevel() {
		return priceLevel;
	}
	public void setPriceLevel(Integer priceLevel) {
		this.priceLevel = priceLevel;
	}
	@Override
	public String toString() {
		return "Property [name=" + name + ", distance=" + distance + ", sales=" + sales + ", priceLevel=" + priceLevel
				+ "]";
	}

}

  

//JAVA8Stream它提供了对集合操作的增强  与I/O不同
public class TestJAVA8Stream {
public static void main(String[] args) {
	/*// Stream操作 List排序
	System.out.println("=====JAVA8Stream操作============方法1找到距离我最近的店铺");
	Property p1 = new Property("木桶饭", 1000, 500, 2);
    Property p2 = new Property("黄焖鸡", 2300, 1500, 3);
    Property p3 = new Property("麦当劳", 580, 3000, 1);
    Property p4 = new Property("肯德基", 6000, 200, 4);
    List<Property> properties = Arrays.asList(p1, p2, p3, p4);
	String name2 = properties.stream()
	                .sorted(Comparator.comparingInt(x -> x.distance))
	                .findFirst()
	                .get().name;
	System.out.println("距离我最近的店铺是:" + name2);*/
	/*System.out.println("======传统操作List排序===========方法二找到距离我最近的店铺");
	Property p1 = new Property("木桶饭", 1000, 500, 2);
    Property p2 = new Property("黄焖鸡", 2300, 1500, 3);
    Property p3 = new Property("麦当劳", 580, 3000, 1);
    Property p4 = new Property("肯德基", 6000, 200, 4);
    List<Property> properties = Arrays.asList(p1, p2, p3, p4);
    Collections.sort(properties, (x, y) -> x.distance.compareTo(y.distance));
    String name = properties.get(0).name;
    System.out.println("距离我最近的店铺是:" + name);*/
	System.out.println("=====迭代=======");
	Property p1 = new Property("木桶饭", 1000, 500, 2);
    Property p2 = new Property("黄焖鸡", 2300, 1500, 3);
    Property p3 = new Property("woi麦当劳", 580, 3000, 1);
    Property p4 = new Property("肯德基", 6000, 200, 4);
    List<Property> properties = Arrays.asList(p1, p2, p3, p4);
	int count = 0;//月销量大于1000的店铺个数
	for (Property property : properties) {
	    if(property.sales > 1000){
	        count++;
	    }
	}
	System.out.println("月销量大于1000的店铺个数:"+count);
	//使用内部迭代进行计算
	long count2 = properties.stream().filter(p -> p.sales > 1000).count();
	System.out.println("月销量大于1000的店铺个数:"+count2);
	long count3 =properties.stream().filter(p -> p.distance < 1000).count();//筛选出距离我在1000米内的店铺
	long count4 =properties.stream().filter(p -> p.name.length() > 5).count();//筛选出名称大于5个字的店铺
	Property property = properties.stream().max(Comparator.comparingInt(p -> p.priceLevel)).get();//筛选出价格最低的店铺
	//获取距离我最近的2个店铺
	List<Property> properties_s = properties.stream()
            .sorted(Comparator.comparingInt(x -> x.distance))
            .limit(2)
            .collect(Collectors.toList());
	//获取所有店铺的名称
	List<String> names = properties.stream()
            .map(p -> p.name)
            .collect(Collectors.toList());
	//获取每个店铺的价格等级
	Map<String, Integer> map = properties.stream()
	        .collect(Collectors.toMap(Property::getName, Property::getPriceLevel));
	//所有价格等级的店铺列表
	Map<Integer, List<Property>> priceMap = properties.stream()
            .collect(Collectors.groupingBy(Property::getPriceLevel));

}
}

  

时间: 2024-10-29 19:06:35

Java 8 : Stream API 练习的相关文章

Java 8 Stream API具体解释

Java 8 Stream API具体解释 一.Stream API介绍 Java 8引入了全新的Stream API,此Stream与Java I/O包里的InputStream和OutputStream是全然不同的概念,它不同于StAX对XML解析的Stream,也不同于Amazon Kinesis对大数据实时处理的Stream.Stream API更像具有Iterable的集合类,但行为和集合类又有所不同,它是对集合对象功能的增强.专注于对集合对象进行各种非常便捷.高效的聚合操作或大批量数

Java 8 Stream API详解

Java 8 Stream API详解 一.Stream API介绍 Java 8引入了全新的Stream API,此Stream与Java I/O包里的InputStream和OutputStream是完全不同的概念,它不同于StAX对XML解析的Stream,也不同于Amazon Kinesis对大数据实时处理的Stream.Stream API更像具有Iterable的集合类,但行为和集合类又有所不同,它是对集合对象功能的增强,专注于对集合对象进行各种非常便捷.高效的聚合操作或大批量数据操

Java 8新特性之旅:使用Stream API处理集合

在这篇“Java 8新特性教程”系列文章中,我们会深入解释,并通过代码来展示,如何通过流来遍历集合,如何从集合和数组来创建流,以及怎么聚合流的值. 在之前的文章“遍历.过滤.处理集合及使用Lambda表达式增强方法”中,我已经深入解释并演示了通过lambda表达式和方法引用来遍历集合,使用predicate接口来过滤集合,实现接口的默认方法,最后还演示了接口静态方法的实现. 源代码都在我的Github上:可以从 这里克隆. 内容列表 使用流来遍历集合. 从集合或数组创建流. 聚合流中的值. 1.

Java 8: Lambdas和新的集合Stream API

Lambda是Java8的主要特色,Java 8: Lambdas & Java Collections | zeroturnaround.com一文介绍了使用Lambda集合处理大量数据的方法. 首先Java集合引入了内部遍历,原来 LambdaJ下面这种方法也可以在Java8中实现: List<Person> persons = asList(new Person("Joe"), new Person("Jim"), new Person(&

Atitit 实现java的linq 以及与stream api的比较

1.1. Linq 和stream api的关系,以及主要优缺点1 1.2. Linq 与stream api的适用场景1 1.3. Java中的linq1 Linq来源于sql,而我们知道在数据查询领域,sql是标准化的一个dsl.. 1.1. Linq 和stream api的关系,以及主要优缺点 Stream更加的通用化,linq比较专一化,专注于数据查询的dsl..Linq就是特殊化的stream.. 此外,linq更加的dsl ,更加方便简洁.. stream相对底层一些,更加灵活,但

Upgrading to Java 8——第四章 The Stream API

在这章中我们将学习Stream API,在JDK 8 中的一项新的特性.为了理解这一章的主题,你需要知道如何使用Lambda表达式和java.util.function里的预定义的函数式接口. 一个Stream 类似于一个管道,但它里面运输的不是水和石油,而是把数据从源头运输到目的地.根据传递的方式,一个stream可以是并行和并发的.并行的stream运行在多核的CPU的机器上会很有用. 乍一看,一个stream就像是一个集合容器,但是,它不是一个数据结构用来存储对象,它只是负责移动对象,所以

Java 8新特性:全新的Stream API

Java 8引入了全新的Stream API.这里的Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同. Stream API引入的目的在于弥补Java函数式编程的缺陷.对于很多支持函数式编程的语言,map().reduce()基本上都内置到语言的标准库中了,不过,Java 8的Stream API总体来讲仍然是非常完善和强大,足以用很少的代码完成许多复杂的功能. 创建一个Stream有很多方法,最简单的方法是把一个Collection变成Stream.我们

Java 8新特性之使用Stream API处理集合

1. 使用流来遍历集合 简介: Java的集合框架,如List和Map接口及Arraylist和HashMap类,让我们很容易地管理有序和无序集合.集合框架自引入的第一天起就在 持续的改进.在Java SE 8中,我们可以通过流的API来管理.遍历和聚合集合.一个基于流的集合与输入输出流是不同的. 如何工作? 它采用一种全新的方式,将数据作为一个整体,而不是单独的个体来处理.当你使用流时,你不需要关心循环或遍历的细节.你可以直接从一个集合创建一个流.然 后你就能用这个流来许多事件了,如遍历.过滤

Java 8新特性stream API用法总结

前言 Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念.它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream.Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data