通过数据源(集合、数组等)生成流
list.stream()
常见生成方式
-
Collection体系的集合可以直接使用默认方法stream()生成流
-
//Collection生成流 ArrayListlist = new ArrayList<>(); HashSet set = new HashSet<>(); Stream listStream = list.stream(); Stream setStream = set.stream(); -
Map体系集合间接生成流
-
//Map生成流 HashMapmap = new HashMap<>(); Stream keyStream = map.keySet().stream(); Stream valueStream = map.values().stream(); Stream > entryStream = map.entrySet().stream();//键值对对象流 -
数组可以通过Stream接口的静态方法of(T…values)生成流
-
//数组生成流 String[] strArray = {"hello","world","java"}; StreamstrArrayStream = Stream.of(strArray); Stream strArrayStream2 = Stream.of("hello", "world", "java"); Stream integerStream = Stream.of(1, 2, 3, 4);
一个流后面可以跟随任意个中间操作,目的是打开流,做出过滤或映射等操作,再返回一个新的流
list.stream().filter()//通常使用Lambda表达式完成规则表达
常见操作方法
-
filter(Predicate predicate):用于对流中的数据进行过滤
Predicate接口中的方法 boolean test(T t):对给定参数进行判断,返回一个布尔值
ArrayList
list = new ArrayList<>(); list.add("林青霞"); list.add("张曼玉"); list.add("王祖贤"); list.add("柳岩"); list.add("张敏"); list.add("张无忌"); list.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(System.out::println); list.stream().filter(s->s.startsWith("张")).forEach(System.out::println); list.stream().filter(s->s.length()==3).forEach(System.out::println); -
limit(long maxSize):截取前指定个参数个数的数据
ArrayList
list = new ArrayList<>(); list.add("林青霞"); list.add("张曼玉"); list.add("王祖贤"); list.add("柳岩"); list.add("张敏"); list.add("张无忌"); list.stream().limit(3).forEach(System.out::println); -
skip(long n):跳过指定个数参数
ArrayList
list = new ArrayList<>(); list.add("林青霞"); list.add("张曼玉"); list.add("王祖贤"); list.add("柳岩"); list.add("张敏"); list.add("张无忌"); list.stream().skip(3).forEach(System.out::println); list.stream().skip(2).limit(2).forEach(System.out::println); -
concat(Stream a,Stream b):合并两个流为一个流(静态方法,通过Stream接口名进行调用)
ArrayList
list = new ArrayList<>(); list.add("林青霞"); list.add("张曼玉"); list.add("王祖贤"); list.add("柳岩"); list.add("张敏"); list.add("张无忌"); Stream s1 = list.stream().limit(4); Stream s2 = list.stream().skip(2); Stream.concat(s1,s2).forEach(System.out::println); -
distinct():返回由该流中不同的元素组成的流(根据Object.equals(Object))
Stream
s1 = list.stream().limit(4); Stream s2 = list.stream().skip(2); Stream.concat(s1,s2).distinct().forEach(System.out::println); -
sorted():自然排序 sorted(Comparator comparator):根据Comparator排序
ArrayList
list = new ArrayList<>(); list.add("linqingxia"); list.add("zhangmanyu"); list.add("wangzuxian"); list.add("liuyan"); list.add("zhangmin"); list.add("zhangwuji"); //自然排序 list.stream().sorted().forEach(System.out::println); //指定排序 // list.stream().sorted(new Comparator () { // @Override // public int compare(String o1, String o2) { // return o1.length()-o2.length(); // } // }).forEach(System.out::println); list.stream().sorted((s1,s2)->{int num = s1.length()-s2.length(); int num2 = num==0?s1.compareTo(s2):num; return num2;}).forEach(System.out::println); -
map(Function mapper):返回由指定函数应用于此流的元素的结果组成的流
Function接口中的方法 R apply(T t),接受一个T类型参数,返回一个R类型结果
ArrayList
list = new ArrayList<>(); list.add("25"); list.add("58"); list.add("24"); list.add("785"); list.add("1354"); list.add("355"); list.stream().map(Integer::parseInt).forEach(System.out::println); -
mapToInt(ToIntFunction mapper):返回一个IntStream(独有方法sum())
int sum = list.stream().mapToInt(Integer::parseInt).sum(); System.out.println("总和:"+sum);
一个流只能有一个终结操作
list.stream().filter().forEach()
常见终结操作
-
forEach(Consumer action):对流中的每个元素进行操作
Consumer接口中的方法 void accept(T t):对给定的参数执行操作
ArrayList
list = new ArrayList<>(); list.add("林青霞"); list.add("张曼玉"); list.add("王祖贤"); list.add("柳岩"); list.add("张敏"); list.add("张无忌"); list.stream().forEach(System.out::println); -
long count():返回此流中元素的个数
long count = list.stream().count(); System.out.println("元素个数为:"+count);
使用collect(Collector collector)方法
Collector接口,需要使用Collectors类来实现其功能
Collectors类软件包 java.util.stream
| static | toSet() | 返回一个 Collector ,将输入元素累加到一个新的 Set 。 |
|---|---|---|
| static | toList() | 返回一个 Collector ,将输入元素累加到一个新的 List 。 |
| static | toMap(Function super T,? extends K> keyMapper, Function super T,? extends U> valueMapper) | 返回一个 Collector ,它将元素累加到 Map其键和值是将提供的映射函数应用于输入元素的结果。两个参数,一个是key,一个是value |
Listlist1 = list.stream().limit(3).collect(Collectors.toList()); list1.forEach(System.out::println);



