一 常见创建流的三种方式
//list集合创建流方式 new ArrayList<>().stream(); new HashSet<>().stream(); //map集合创建流方式, 原理同list HashMap<Object, Object> map = new HashMap<>(); Stream<Object> stream2 = map.keySet().stream(); Stream<Object> stream3 = map.values().stream(); Stream<Map.Entry<Object, Object>> stream4 = map.entrySet().stream(); //数组创建流的方式(可变参数) String[] arr = {"hello"}; Stream.of(arr);
二 stream 中间操作 filter 的使用(过滤操作,过滤后可能会减少数据)
List<String> list = new ArrayList<>(); list.add("林青霞"); list.add("张曼玉"); list.add("王祖贤"); list.add("柳岩"); list.add("张敏"); list.add("张无忌"); //以"张"开头的控制台输出 list.stream().filter(s->s.startsWith("张")).forEach(System.out::println); //长度为3的在控制台输出 list.stream().filter(s->s.length() == 3).forEach(System.out::println); //以"张"开头的并长度为3的在控制台输出 list.stream().filter(s->s.startsWith("张")).filter(s->s.length() == 3).forEach(System.out::println);
"System.out::println" 这种格式的叫方法引用同 "s->System.out.println(s)"
三 Stream 常见的中间操作limit & skip
List<String> list = new ArrayList<>(); list.add("林青霞"); list.add("张曼玉"); list.add("王祖贤"); list.add("柳岩"); list.add("张敏"); list.add("张无忌"); //取前三个数据在控制台输出 list.stream().limit(3).forEach(System.out::println); //跳过三个元素把剩余的元素的控制台输出 list.stream().skip(3).forEach(System.out::println); //跳过两个元素,把剩下的元素中前两个元素在控制台输出 list.stream().skip(2).limit(2).forEach(System.out::println);
四 Stream 常见中间操作 concat & distanct
List<String> list = new ArrayList<>(); list.add("林青霞"); list.add("张曼玉"); list.add("王祖贤"); list.add("柳岩"); list.add("张敏"); list.add("张无忌"); //取前4个组成一个流 Stream<String> limit = list.stream().limit(4); //跳过两个数据组成一个流 Stream<String> skip = list.stream().skip(2); //合并需求1和2流,并把结果在控制台输出 Stream.concat(limit,skip).forEach(System.out::println); //合并需求1和2流,并把结果在控制台输出要求不能重复 Stream.concat(limit,skip).distinct().forEach(System.out::println);
五 Stream 常见中间操作 sorted
List<String> list = new ArrayList<>(); list.add("lingqingxia"); list.add("zhangmanyux"); list.add("wangzuxianx"); list.add("liuyan"); list.add("zhangmin"); list.add("zhangwuji"); //按照字母顺序排序在控制台输出 list.stream().sorted().forEach(System.out::println); //按照字符串长度,然后按照字母顺序在控制台输出 list.stream().sorted((s1,s2)->{ int num = s1.length() - s2.length(); return num == 0 ? s1.compareTo(s2) : num; }).forEach(System.out::println);
六 Stream 常见中间操作 Map(过滤后数据不会减少 可能修改了某些内容)
List<String> list = new ArrayList<>(); list.add("01"); list.add("10"); list.add("20"); list.add("30"); list.add("40"); list.add("50"); //对字符进行数据转换 list.stream().map(Integer::parseInt).forEach(System.out::println); //mapToInt 不仅有map属性还带有特殊方法,求和求平均数等操作 list.stream().mapToInt(s->Integer.parseInt(s)).forEach(System.out::println); //mapToInt 转换int并求和 int sum = list.stream().mapToInt(Integer::parseInt).sum(); System.out.println(sum);
七 Stream 终结操作 foreach & count
List<String> list = new ArrayList<>(); list.add("林青霞"); list.add("张曼玉"); list.add("王祖贤"); list.add("柳岩"); list.add("张敏"); list.add("张无忌"); //把集合中的元素在控制台输出控制台上 list.stream().forEach(System.out::println); //把集合中的元素数量输出到控制台上 long count = list.stream().count(); System.out.println(count);
八 Stream 收集操作collection list
List<String> list = new ArrayList<>(); list.add("林青霞"); list.add("张曼玉"); list.add("王祖贤"); list.add("柳岩"); list.add("张敏"); list.add("张无忌"); //生成流 Stream<String> listStream = list.stream().filter(s -> s.length() == 3); //生成新的集合 List<String> stringList = listStream.collect(Collectors.toList());
Collections.toList() 变成list集合
Collections.toSet() 变成set集合
九 Stream 收集操作collection map
String[] arr = {"林青霞,33","张曼玉,28","柳岩,22"}; Map<String, String> maps = Stream.of(arr).collect(Collectors.toMap(s -> s.split(",")[0], s1 -> s1.split(",")[1])); for (Map.Entry<String, String> entry : maps.entrySet()) { System.out.println("姓名:"+entry.getKey()+",年龄"+entry.getValue()); }
Collections.toMap(k,v)
标签:常用,java,Stream,stream,list,System,add,println From: https://www.cnblogs.com/lccsdncnblogs/p/17099712.html