2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Java------Stream流式编程常用API【limit skip concat distinct sorted】(四)

Java------Stream流式编程常用API【limit skip concat distinct sorted】(四)

时间:2021-02-27 06:53:50

相关推荐

Java------Stream流式编程常用API【limit skip concat distinct sorted】(四)

Java------Stream流式编程常用API【limit,skip,concat,distinct,sorted】(四)

这篇文章讲:limit、skip、concat、distinct、corted五个流的中间操作的基础API。

limit():截取

截取流的前几个元素,方法原型如下:

Stream<T> limit(long maxSize);

limit()方法实现截取流的前n个元素组成一个新流,n小于元素个数则截取n个元素,n大于等于元素个数则取整个集合它是一个有状态方法

示例1:输出流的前三个,

@Testpublic void test1() {List<StringBuffer> strs = new ArrayList<>();strs.add(new StringBuffer("hello"));strs.add(new StringBuffer("world"));strs.add(new StringBuffer("hi"));strs.add(new StringBuffer("com"));strs.add(new StringBuffer("student"));//如果输入limit大于n个元素,则会全部输出strs.stream().limit(3).forEach(System.out::println);}

skip():跳过

skip()跳过n个元素,剩余元素组成一个新流,如果n大于等于集合个数则生成一个空流。

Stream<T> skip(long n);

示例2:只输出最后两个,此时limit大于5,则都不会输出

@Testpublic void test1() {List<StringBuffer> strs = new ArrayList<>();strs.add(new StringBuffer("hello"));strs.add(new StringBuffer("world"));strs.add(new StringBuffer("hi"));strs.add(new StringBuffer("com"));strs.add(new StringBuffer("student"));strs.stream().skip(3).forEach(System.out::println);}

concat():截取

concat()方法合并两个流组成一个新流,API如下:

public static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b)

从API可以开出待合并的两个流的元素类型是相同的。

示例3:将两个流合并

@Testpublic void test1() {List<StringBuffer> strs = new ArrayList<>();strs.add(new StringBuffer("hello"));strs.add(new StringBuffer("world"));strs.add(new StringBuffer("hi"));strs.add(new StringBuffer("com"));strs.add(new StringBuffer("student"));List<StringBuffer> strs2 = new ArrayList<>();strs2.add(new StringBuffer("hello"));strs2.add(new StringBuffer("world"));strs2.add(new StringBuffer("hi"));strs2.add(new StringBuffer("com"));strs2.add(new StringBuffer("student"));Stream.concat(strs.stream(),strs2.stream()).forEach(System.out::println);}

多个流合并,只需要嵌套调用Steam.concat方法即可。

Stream.concat(strs.stream(),Stream.concat(strs2.stream(),strs3.stream())).forEach(System.out::println);

distinct():去重

distinct()去重方法,对流的元素进行去重操作,使用equals()、hashCode()方法判断元素是否相等,重复的元素则放弃,它是一个有状态方法

Stream<T> distinct();

示例4:去重

@Testpublic void test1() {List<String> strs = new ArrayList<>();strs.add("hello");strs.add("hello");strs.add("hi");strs.add("hi");strs.add("student");strs.stream().distinct().forEach(System.out::println);}

如果去重实体类,则需要重写equals方法,以及hsahCode方法

@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;PbCourse pbCourse = (PbCourse) o;return id == pbCourse.id &&Objects.equals(courseName, pbCourse.courseName);}@Overridepublic int hashCode() {return Objects.hash(id, courseName);}

sorted():排序

sorted()是有状态方法,对流中的元素进行排序,支持自然排序和比较器排序,建议使用比较器排序。(自然排序和比较器排序知识请参考TreeMap知识点)

Stream<T> sorted(Comparator<? super T> comparator);

示例5,排序

@Testpublic void test1() {List<String> strs = new ArrayList<>();strs.add("hello");strs.add("world");strs.add("hi");strs.add("com");strs.add("student");//x1的长度大于2x的长度,strs.stream().sorted((x1,x2)->x1.length()-x2.length()).forEach(System.out::println);}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。