Java大数据之路--集合-流结构Stream、泛型上下限表达

  • Stream


用于操作集合元素的流式结构,提供了大量的函数式接口方便使用---jdk1.8新特性 。

泛型:参数化类型----jdk1.5出现的。泛型可以支持任意引用数据类型,泛型的擦除在编译时期

public class StreamDemo {
    public static void main(String[] args) {
        //创建集合对象
        List list = new ArrayList<>();
        list.add("C");
        list.add("Python");
        list.add("C++");
        list.add("C#");
        list.add("Java");
        list.add("Go");
        list.add("VB");
        list.add("PHP");
        //筛选出以C开头的元素
        //遍历集合元素
//        for (String string:list) {
//            //判断是否以C开头
//            if (string.startsWith("C")){
//                System.out.println(string);
//            }
//        }
        //获取流式结构
        Stream s=list.stream();
//        s.filter(new Predicate() {
//            //重写方法进行筛选元素
//            @Override
//            public boolean test(String s) {
//                return s.startsWith("C");
//            }
//        }).forEach(new Consumer() {
//            //重写方法把筛选的元素进行输出
//            @Override
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        });
        //Lambda表达式
//        s.filter(str->str.startsWith("C")).sorted((str1,str2)->str2.compareTo(str1))//排序
//                .forEach(str-> System.out.println(str));
        //统计匹配数
        System.out.println(s.filter(str->str.startsWith("C")).count());
    }
}

 自定义泛型

public class TypeDemo {
    public static void main(String[] args) {
        TDemo td = new TDemo<>();
        //属性类型确定了
        td.t="avc";
        td.m(new Integer(0));
        td.m("acx");
        td.m(true);
        td.m(2.3);
    }

}
//自定义泛型类
//类名<大写字母>
/*
* E ---elements元素
* T----Type类型
* R----Result结果
* K----键
* V----值
* */
class TDemo{
    //属性
    E t;//属性类型可以是任意的引用类型
    //给定的引用类型可能不能直接创建对象,比如接口
    //E t = new E();
    //泛型K可以当做参数的属性类型,可以接口任意的引用类型
    public  void m(K i){
        System.out.println(i.getClass()); //允许传入不同类型的参数
    }
}

泛型上下限

public class TypeDemo {
    public static void main(String[] args) {
        //
        List list1 = new ArrayList<>();
        //
        list1.add( 12 );
        list1.add( 122 );
        list1.add( 212 );
        list1.add( 312 );
        list1.add( 112 );
        //集合对象
        List list2 = new ArrayList<>();
        //
        list2.add(1.0);
        list2.add(1.2);
        list2.add(2.1);
        list2.add(6.3);
        list2.add(1.5);
        m(list1);
        m(list2);
    }
    //只遍历数字类型的集合
    //数字包装类的统一父类是Number
    //泛型没有向上造型
    //表示最大在Number类型  ----可以传入的类型包括 本类/本接口或者子类以及子接口
    //泛型的上限
    public static void m(List list){
        for (Object object: list) {
            System.out.println(object);
        }
    }
    //泛型的下限
    //传入的类型最小类型是String
    //----可以传入的类型要么是本类/本接口,或者是父类以及父接口
    public void n(List list){
    }
}

 

你可能感兴趣的:(JavaSE)