编程语言
首页 > 编程语言> > Javaheima12

Javaheima12

作者:互联网

Java

不可变集合

创建

方法名称 说明
static List of(E...elements) 创建一个具有指定元素的List集合对象
static Set of(E...elements) 创建一个具有指定元素的Set集合对象
static <K,V> Map<K,V> of(E...elements) 创建一个具有指定元素的Map集合对象

Stream流

概述

package com.yu.Day0525Demo;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class StreamTest {
    public static void main(String[] args) {
        List<String> lists = new ArrayList<>();
        Collections.addAll(lists,"张无忌","周芷若","赵敏","张三丰","张强","张xx");
        System.out.println(lists);

//        List<String> ZhangLists = new ArrayList<>();
//        for (String list:lists
//             ) {
              //筛选姓张的
//            if(list.startsWith("张")){
                  // 筛选姓名长度为三个字的
//                if(list.length() == 3){
//                    ZhangLists.add(list);
//                }
//            }
//        }
//        System.out.println(ZhangLists);
//        lists.stream().filter(s -> s.startsWith("张")).filter(s -> s.length() == 3).forEach(s -> System.out.println(s));
        lists.stream().filter(s -> s.startsWith("张") && s.length() == 3).forEach(s -> System.out.println(s));
}
}
思想和使用步骤

三类方法

获取Stream流

Stream操作集合或者数组的第一步是先得到Stream流,然后才能使用流的功能

集合获取Stream流的方式
数组获取Stream流的方式
名称 说明
public static Stream stream(T[] array) 获取当前数组的Stream流
public static Stream of(T...values) 获取当前数组/可变数据的Stream流
package com.yu.Day0526Demo;

import java.util.*;
import java.util.stream.Stream;

public class StreamDemo01 {
    public static void main(String[] args) {
        /**---------------Colleaction集合获取流---------------**/
        Collection<String> list = new ArrayList<>();
        Stream<String> s = list.stream();
        /**---------------Map集合获取流---------------**/
        Map<String,Integer> maps = new HashMap<>();
        //获取键流
        Stream<String> keys = maps.keySet().stream();
        //获取值流
        Stream<Integer> values = maps.values().stream();
        //键值对流
        Stream<Map.Entry<String,Integer>> keyvalues = maps.entrySet().stream();
        /**---------------数组获取流---------------**/
        String[] names = {"yu","xiao","yu"};
        Stream<String> nameStream = Arrays.stream(names);
        Stream<String> nameStream2 = Stream.of(names);
        System.out.println();
    }
}
中间方法
名称 说明
Stream filter(Predicate<? super T> predicate) 用于对流中的数据进行过滤
Stream limit(long maxSize) 获取前几个元素
Stream skip(long n) 跳过前几个元素
Stream distinct() 去除流中重复的元素.依赖(hashCode和equals方法)
static Stream concat(Stream a,Stream b) 合并a和b两个流为一个流
注意
package com.yu.Day0526Demo;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Stream;

public class StreamAPI01 {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("张无忌");
        names.add("周芷若");
        names.add("张三丰");
        names.add("赵敏");
        names.add("张强");
        names.add("张弓长");

        //Stream<T> filter(Predicate<? super T> predicate)
        //对流中数据进行过滤
//        names.stream().filter(new Predicate<String>() {
//            @Override
//            public boolean test(String s) {
//                return s.startsWith("张");
//            }
//        });
        names.stream().filter(s -> s.startsWith("张")).forEach(s -> System.out.println(s));
        long size = names.stream().filter(s->s.length()==3).count();
        System.out.println(size);
        names.stream().filter(s -> s.length() == 3).limit(2).forEach(s -> System.out.println(s));
        System.out.println("---------我是一条分界线-----------");
        names.stream().filter(s -> s.length() == 3).skip(2).forEach(System.out::println);
        System.out.println("---------我是一条分界线-----------");
//        names.stream().map(s -> "金庸的:"+s).forEach(s -> System.out.println(s));
        //将集合放到对象中
        names.stream().map(s -> new Student(s)).forEach(s -> System.out.println(s));
        //                方法引用                构造器引用
        names.stream().map(Student::new).forEach(System.out::println);
        //合并流
        Stream<String> s1 = names.stream().filter(s -> s.length() == 3);
        Stream<String> s2 = Stream.of("yu","xiao");
        Stream.concat(s1,s2).forEach(s-> System.out.println(s));
    }
}
终结方法
总结

终结和非终结方法的含义是什么?

终结方法后流不可以继续使用,非终结方法会返回新的流,支持链式编程

标签:Stream,stream,System,Javaheima12,names,println,out
来源: https://www.cnblogs.com/yuxxiao/p/16336403.html