java1.8 新特性(五 如何使用filter,limit ,skip ,distinct map flatmap ,collect 操作 java集合)
- 使用filter 根据 条件筛选 出结果:例如 找出 user 中 age >=15 的用户
package lambda.stream;
/**
* @author 作者:cb
* @version 创建时间:2019年1月4日 下午2:35:05 */ import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream; public class StreamDemo {
public static void main(String[] args) {
// 1.集合创建stream对象
List<User> asList = Arrays.asList(new User("张三", 15), new User("李四", 25), new User("Tom", 10));
Stream<User> streamList = asList.stream();
// 找出 user age>15 的user collect(Collectors.toList()) 返回一个对应的集合
List<User> collect = streamList.filter(user -> user.getAge() >= 15).collect(Collectors.toList());
//集合提供的遍历方法。。打印user对象
collect.forEach(user -> System.out.println(user));
} }public interface Stream<T> extends BaseStream<T, Stream<T>> { /**
* Returns a stream consisting of the elements of this stream that match
* the given predicate.
*
* <p>This is an <a href="package-summary.html#StreamOps">intermediate
* operation</a>.
*
* @param predicate a <a href="package-summary.html#NonInterference">non-interfering</a>,
* <a href="package-summary.html#Statelessness">stateless</a>
* predicate to apply to each element to determine if it
* should be included
* @return the new stream
*/
Stream<T> filter(Predicate<? super T> predicate);Stream<T> filter(Predicate<? super T> predicate) 接受的是一个 predicate 类型的接口参数。predicate 有一个test 的抽象boolean类型的返回值方法。该方法满足条件age>=15 返回true 则程序 向下执行,执行结果:
User [name=张三, age=15]
User [name=李四, age=25]为了方便 所以 该测试类 每个步骤分开写的,连着写:
package lambda.stream;
/**
* @author 作者:cb
* @version 创建时间:2019年1月4日 下午2:35:05 */ import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream; public class StreamDemo {
public static void main(String[] args) {
// 1.集合创建stream对象
List<User> asList = Arrays.asList(new User("张三", 15), new User("李四", 25), new User("Tom", 10));
Stream<User> streamList = asList.stream();
// 找出 user age>15 的user .collect(Collectors.toList()) 返回一个对应的集合
// List<User> collect = streamList.filter(user -> user.getAge() >=
// 15).collect(Collectors.toList());
// 集合提供的遍历方法。。打印user对象
// collect.forEach(user -> System.out.println(user));
streamList.filter(user -> user.getAge() >= 15).collect(Collectors.toList())
.forEach(user -> System.out.println(user));
} } - 使用stream distinct 去掉一个集合中的重复元素“:
package lambda.stream;
/**
* @author 作者:cb
* @version 创建时间:2019年1月4日 下午2:35:05 */ import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream; public class StreamDemo {
public static void main(String[] args) {
testDistinct();
} /**
* 去重
*/
public static void testDistinct() {
List<Integer> asList = Arrays.asList(1, 2, 3, 5, 6, 7, 8, 8, 9, 7);
List<Integer> collect = asList.stream().distinct().collect(Collectors.toList());
collect.forEach(System.out::print);
} }结果:
12356789
指定跳过多少个数据 类似 于 for循环里面的break 例如:
package lambda.stream;
/**
* @author 作者:cb
* @version 创建时间:2019年1月4日 下午2:35:05 */ import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream; public class StreamDemo {
public static void main(String[] args) {
testSkp();
} public static void testSkp() {
List<Integer> asList = Arrays.asList(1, 2, 3, 5, 6, 7, 8, 9);
List<Integer> collect = asList.stream().skip(5).collect(Collectors.toList());
collect.forEach(System.out::print);
}结果:
789
取一个集合的前几条数据
package lambda.stream;
/**
* @author 作者:cb
* @version 创建时间:2019年1月4日 下午2:35:05 */ import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream; public class StreamDemo {
public static void main(String[] args) {
testLimit();
} public static void testLimit() {
List<Integer> asList = Arrays.asList(1, 2, 3, 5, 6, 7, 8, 9);
List<Integer> collect = asList.stream().limit(5).collect(Collectors.toList());
collect.forEach(System.out::print);
}结果:
12356
- 使用map 將集合中的每个数字 扩大 两倍 :
package lambda.stream;
/**
* @author 作者:cb
* @version 创建时间:2019年1月4日 下午2:35:05 */ import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors; public class StreamDemo {
public static void main(String[] args) {
testMap();
} public static void testMap() {
List<Integer> asList = Arrays.asList(1, 2, 3, 5, 6, 7, 8, 9);
List<Integer> collect = asList.stream().map(i -> i * 2).collect(Collectors.toList());
collect.forEach(System.out::println);
}结果:
2
4
6
10
12
14
16
18
6 .解决一个字符串数组 返回单一的字符串使用flatMap:
package lambda.stream;
/**
* @author 作者:cb
* @version 创建时间:2019年1月4日 下午2:35:05 */ import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream; public class StreamDemo {
public static void main(String[] args) {
flatMap();
} public static void flatMap() {
List<String> list = Arrays.asList("AABBBACCDED", "EDADCAJIONG "); list.stream().flatMap(item -> Arrays.stream(item.split(""))).distinct().collect(Collectors.toList())
.forEach(System.out::printf);
结果:
ABCDEJIONG
关于 map 和 flatMap的区别,可以了解一下。这里记录一下自己的用法 毕竟写这些 主要是给自己看 怕自己哪天忘了 回头在看看

java1.8 新特性(五 如何使用filter,limit ,skip ,distinct map flatmap ,collect 操作 java集合)的更多相关文章
- java1.8新特性之stream流式算法
在Java1.8之前还没有stream流式算法的时候,我们要是在一个放有多个User对象的list集合中,将每个User对象的主键ID取出,组合成一个新的集合,首先想到的肯定是遍历,如下: List& ...
- Stream:java1.8新特性
原 Stream:java1.8新特性 2017年08月01日 18:15:43 kekeair-zhang 阅读数:392 标签: streamjava1-8新特性 更多 个人分类: 日记 版权声明 ...
- java1.8新特性(一)
一直在更新java 版本,原来也没有关注java版本的变化 引入的一些新的api 引起注意的还是 关于一些并发包的使用,那时候才对每个版本的特性 去了解了一下,虽然 不一定都用上了,但是不管学习什 ...
- java1.8新特性整理(全)
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/yitian_66/article/deta ...
- java1.8新特性
转自:http://www.oschina.NET/translate/everything-about-Java-8 建议去看原文,此处转载只是为了记录. 这篇文章是对Java8中即将到来的改进做一 ...
- Servlet3.0新特性WebFilter(Annotation Filter)详解
摘要: Servlet3.0作为J2EE 6规范一部分,并随J2EE6一起发布,WeFilter是过滤器注解,是Servlet3.0的新特性,不需要在web.xml进行配置,简化了配置. Name T ...
- java8新特性五-Stream
继上次学习过Java8中的非常重要的Lambda表达式之后,接下来就要学习另一个也比较重要的知识啦,也就如标题所示:Stream,而它的学习是完全依赖于之前学习的Lambda表达式. Java 8 A ...
- java1.7新特性:try-with-resources
转载:https://blog.csdn.net/fanxiaobin577328725/article/details/53067163 首先看代码: import org.junit.Test; ...
- Java1.8新特性 - Stream流式算法
一. 流式处理简介 在我接触到java8流式数据处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式处理可以在一行中实现.比如我们希望对一个包 ...
随机推荐
- ZOJ 1005:Jugs(思维)
Jugs Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge In the movie "Die Har ...
- Odoo9以后的社区版本和企业版功能上的区别
Odoo9以后的社区版本和企业版除了授权模式的区别外,整理功能上的区别 透过功能设置菜单整理的区别如下,主要功能模块. 未包括所有模块,毕竟模块太多了. 以下是企业版有,而社区版没有的功能.
- CentOS7.0防火墙以及开关机命令
CentOS 7.0默认使用的是firewall作为防火墙 查看防火墙状态firewall-cmd --state 停止firewallsystemctl stop firewalld.service ...
- 《DSP using MATLAB》Problem 5.30
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...
- hdu1875 畅通工程再续 并查集/最小生成树
相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政府决定实现百岛湖的全 ...
- 51cto-spring boot(一Spring4快速入门)
https://search.maven.org/classic 查找maven依赖的pom.xml文件
- 安装Centos7时提示 /dev/root does not exits
安装centos 7时提示 "Warning: /dev/root does not exist, could not boot" 这个问题是木有找到你的U盘. 在一个能够编辑U盘 ...
- xenserver使用快照创建虚拟机,提示eth0 has different mac错误
这个报错的意思就是说mac地址错误 我们对比后可以发现,用快照创建的虚拟机和原虚拟机的eth0那个配置文件的 mac地址是一样的,因为mac地址具有唯一性,所以就报这个错,无法配置ip上网 解决方法很 ...
- 重拾C++第一天_WDS
1.面向对象编程的三大特点:封装.继承.多态 2.C++中若不指定类中成员的访问权限默认就是private的(class默认是private的,struct默认是public的). 3.C++规范中类 ...
- C# to IL 3 Selection and Repetition(选择和重复)
In IL, a label is a name followed by the colon sign i.e ":". It gives us the ability to ju ...