Java8 对集合的操作

     Java8 中引入了Stream流的概念,也有许多相关Stream API 提供我们使用, 通过Stream流操作集合,这样使得我们对集合的操作更加方便,对集合的操作效率会变的更高一些。 因为在以前使用的for 循环操作结合都是外部迭代,现在使用Stream流操作集合都是内部迭代,这样效率会更高。

一、 流操作的基本步骤:

1. 创建流 Stream

创建Stream的四种方式
1. 可以通过 Collection 系列集合提供的 stream() 或 parallelStream()
       Stream s = list.stream();
2. 通过Arrays 中的静态方法 Stream () 方法获取Stream

3. 通过 Stream 中的静态方法 of() 方式 获取得到Stream
     Stream <String> stream =Stream.of("");

4. 创建无限流
   // 迭代
   Stream.iterate(起始值, 操作)

2. 对流进行中间一系列的操作

1. 筛选与操作
filter-----接受Lambda ,从流中排除某些元素
limit----越断流,  使其元素不超过给定的数量
skip(n) ---跳过元素,返回一个扔掉了前n 个元素的流,若流元素中不足n个,则返回一个空流。
      与limit(n) 互补
 distinct----筛选 ,通过流所生成元素hashCode() 和equals() 去除重复元素
 
2. 映射
 map -----接受Lambda, 将元素转换成其他形式或提取元素,接受一个函数作为参数,该函数会被应用到每个元素上,
 并将其映射成一个新的元素
 flatMap: 接受一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流
3.查找和匹配
Stream API通过allMatch、anyMatch、noneMatch、findFirst和findAny
4. 排序
sorted() ---自然排序(Comparable)
sorted(Comparator com ) ---定制排序(Comparator)

3.  终止操作

规约与收集
 reduce( )  将流中元素反复结合起来,得到一个值
 collect()  将流转换为其他形式,接受一个Collector接口的实现,用于Stream中元素做汇总的方法

二、 代码示例

1. 创建实体类

public class LineContent {

   public double id;
   public int page;
   public float x;
   public float y;
   public String text;

    public LineContent(String text) {
        this.text = text;
    }

    public LineContent( float x, float y, String text) {
        this.x = x;
        this.y = y;
        this.text = text;
    }

    public LineContent(double id, int page, float x, float y, String text) {
        this.id = id ;
        this.page = page;
        this.x = x;
        this.y = y;
        this.text = text;
    }

    public int getPage() {
        return page;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public float getX() {
        return x;
    }

    public void setX(float x) {
        this.x = x;
    }

    public float getY() {
        return y;
    }

    public void setY(float y) {
        this.y = y;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }
    public double getId() {
        return id;
    }

    public void setId(double id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "LineContent{" +
                "page=" + page +
                ", x=" + x +
                ", y=" + y +
                ", text='" + text + '\'' +
                '}';
    }
}

2. 对应的list集合数据,在这里用图片显示

3. Java8  Stream 流对集合的操作

Collection

  3.1 过滤 选择list 集合中对象某个属性值大于,或者小于代码

 // 过滤得到X 值大于200的放入到一个新的集合
List<LineContent> rightLineContentList = lineContents
                .stream()
                .filter(o -> o.getX() > 200)
                .collect(Collectors.toList());

3.2 截取和越断

//截取List集合中前n 个元素
 List<LineContent> newList =lineContents.stream().limit(5).collect(Collectors.toList());

// 越断List 集合中最后的几个元素
index = lineContents.size()- 5;
rightLineContentList = (lineContents.stream().skip(index).collect(Collectors.toList()));

 3.3 排序

// 自定义排序,通过Y坐标逆排序
 List<LineContent> newList = lineContents.stream().sorted(Comparator.comparingDouble(LineContent::getY).reversed()).collect(Collectors.toList());

3.4 遍历将Map集合的Value 存放到list集合中

  List<String> leftList = leftContentMap.entrySet().stream().map(o -> o.getValue()).collect(Collectors.toList());

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值