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) {
< = text;
}
public LineContent( float x, float y, String text) {
this.x = x;
this.y = y;
< = 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;
< = 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) {
< = text;
}
public double getId() {
return id;
}
public void setId(double id) {
this.id = id;
}
@Override
public String toString() {
java线程池创建的四种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)
.List());
3.2 截取和越断
//截取List集合中前n 个元素
List<LineContent> newList =lineContents.stream().limit(5).List());
// 越断List 集合中最后的⼏个元素
index = lineContents.size()- 5;
rightLineContentList = (lineContents.stream().skip(index).List()));
3.3 排序
// ⾃定义排序,通过Y坐标逆排序
List<LineContent> newList = lineContents.stream().sorted(ComparatorparingDouble(LineContent::getY).reversed()).List());
3.4 遍历将Map集合的Value 存放到list集合中
List<String> leftList = Set().stream().map(o -> o.getValue()).List());
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论