jdk8新特性stream流式计算
Stream的特点:
(1)不存储元素;
(2)不改变源数据;
(3)具有延迟执行,类似懒加载。
特此记录Stream的学习案例:
先设计一个类:
package com.pipi.test;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.junit.Test;
import java.text.Collator;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true) // 支持链式编程,例如:product.setId(1001).setName("辣条").setPrice(2.0f)
class Product {
private Integer id;
private String name;
private Float price;
}
实例化一个属性变量:
public class StreamTest {
private static List<Product> products = Arrays.asList(
new Product(1001,"辣条",3.0f),
new Product(1002,"薯片",4.5f),
new Product(1003,"汤达人",5.5f),
new Product(1004,"可乐",3.0f),
new Product(1005,"凤爪",5.5f)
);
// 这里写测试方法
@Test
public void m1() {
// ...
}
}
1、sort() 排序
测试代码:
@Test
public void m1() {
// 按照价格排序,默认升序
List<Product> sort_asc = products.stream().sorted(Comparator.comparing(Product::getPrice)).collect(Collectors.toList());
System.out.println(sort_asc); // 顺序为:辣条,可乐,薯片,汤达人,凤爪
// 降序排序
List<Product> sort_desc = products.stream().sorted((o1, o2) -> {
return o2.getPrice().compareTo(o1.getPrice());
}).collect(Collectors.toList());
System.out.println(sort_desc); // 顺序为:汤达人,凤爪,薯片,辣条,可乐
// 也可以这样写
List<Product> sort_desc1 = products.stream().sorted(Comparator.comparing(Product