java1.8 新特性(五 如何使用filter,limit ,skip ,distinct map flatmap ,collect 操作 java集合)
Posted 年少不知愁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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集合)的主要内容,如果未能解决你的问题,请参考以下文章