集合中的Stream+Collections+Iterator学习

  • 泛型
    作用是建立数据类型安全的集合,把类型当做一种参数一样传递,只能是引用数据类型,Object可以代表是任意类型,但是也会出现类型转换错误ClassCastException异常,

  • 泛型类
    把泛型定义在类上就是泛型类,用户在使用类时才能明确类型,

  • 泛型接口
    泛型接口的具体类型需要在实现类中声明,

  • Collection集合
    单例集合:数据是一个一个进行存储,
    双例集合:基于key-value的结构存储数据,

  • Collection接口
    collection是单例集合的根接口,他有两个子接口list和set,
    collection接口中的方法:add(),remove(),contains():是否包含该元素,size()集合中的元素个数,clear()清空,iterator()迭代器,containsAll(collection):是否包含该集合,toArray():转化成数组,
    jdk中的新方法:removeIf() 删除容器中所有满足指定条件的元素,
    stream():将要处理的元素看做一种流,流在管道中传输,并且可以在管道的节点上处理,包括过滤筛选、去重、排序、聚合等。元素流在管道中经过中间操作的处理,最后由最终操作得到前面处理的结果。流就是对数据进行加工处理一个过程,

集合中有两种方式生成流:stream()- 创建串行流,parallelStream()-创建并行流,Collection接口中加入了default方法stream(),

public static void main(String[] args) {
        ArrayList<Object> list = new ArrayList<>();
        Stream<Object> stream = list.stream();//list变成流对象
        String[] str = {"1","2","3","4"};
        Stream<String> str1 = Stream.of(str);//数组变成流对象 流只能是引用类型啊
        str1.forEach(System.out::println);
    }
  • Stream常用方法介绍
    Stream流的操作很丰富,方法分为两种:
    1count , 统计个数, 返回值类型是long,种类:终结
    2 forEach,遍历 ,void, 终结,
    3 fifilter ,过滤 , Stream ,函数拼接,
    4 limit ,取前几个,Stream,函数拼接,
    5 concat,组合,Stream,函数拼接,
    6 skip ,跳过前几个,Stream,函数拼接,
    7 map,映射,Stream,函数拼接,
    注意Stream流只能操作一次,该方法返回的新的流,Stream不调用终结方法中间操作是不会执行的,
//forEach是用来遍历流中的数据的,
        TreeSet<String> str = new TreeSet<>();
        str.add("1");
        str.add("2");
        str.add("3");
        str.add("4");
        str.add("5");
        str.add("6");
        Stream<String> stream = str.stream();
        stream.forEach(System.out::println);

		//从流中获取元素个数
        long count = stream.count();
        System.out.println(count);

		 /**filter方法是用来过滤数据的,返回符合条件的数据,
        查看Stream.filter(Predicate<? super T> predicate
        查看predicate 是一个functionalInterface函数式接口有一个需要实现的方法是
         isEqual,所有我要实现这个方法
         */
        stream.filter((s)->s.contains("6")).forEach(System.out::println);
        //参数是分页的个数 从前到后哈,
		stream.limit(4).forEach(System.out::println);
		//跳过前几个元素
  		stream.skip(1).forEach(System.out::println);
		//去掉重复的数据 基本类型直接去重,引用类型需要重写hashCode和equals方法
		 stream.distinct().forEach(System.out::println);
		 

		//合并两个流
		package com.example.ajaxdemo.springmvc;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.TreeSet;
import java.util.stream.Stream;

public class CollectionTest {
    public static void main(String[] args) {
        //forEach是用来遍历流中的数据的,
        TreeSet<String> str = new TreeSet<>();
        str.add("1");
        str.add("2");
        str.add("3");
        str.add("3");
        str.add("4");
        str.add("5");
        str.add("5");
        str.add("6");
        str.add("6");
        Stream<String> stream = str.stream();
        ArrayList<String> strings = new ArrayList<>();
        strings.add("张");
        strings.add("Rudy");
        strings.add("java");
        Stream<String> stream1 = strings.stream();
        //合并两个流的方法
        Stream.concat(stream,stream1).forEach(System.out::println);
    }
}


  • Collections工具类
    他提供了对set,list,map,进行排序,填充,查找元素的方法,该类中所有的方法都是静态方法,
    ArrayList<String> list = new ArrayList<>();
        list.add("c");
        list.add("b");
        list.add("a");
        list.add("e");
        list.add("h");
        Collections.sort(list);//进行排序
        for (String temp:list){
            System.out.print(temp);
        }
        System.out.println("洗牌开始+++++++++++");
        Collections.shuffle(list);
        for (String temp: list) { //进行洗牌
            System.out.print(temp);
        }

        System.out.println("在原来的基础上倒序");
        Collections.reverse(list);//倒序
        for(String li :list){
            System.out.print(li);
        }

		Collections.sort(list);//进行排序
		for (String str:list){
		    System.out.print(str);
		}
		System.out.println("");
		int i = Collections.binarySearch(list, "c");//查询出目标的下标
		System.out.println(i);
		System.out.println(list.get(i));

		ArrayList<String> list1 = new ArrayList<>();//默认是0 开始扩容
        Collections.addAll(list1,new String[list.size()]);//添加一个数组大小是上一个数组的大小
        Collections.copy(list1,list);
        for(String str:list1) {
            System.out.print(str);
        }


		Collections.fill(list,"张");//指定元素代替所有元素
        for(String str:list){
            System.out.println(str);
        }
  • Iterator迭代器
    Colllection接口继承了Iterable接口,所有有了iterator方法,该方法会返回一个迭代器对象,该对象中包含了三个方法,用于迭代,
    1 hasNext(); 判断当前游标位置是否有元素,有返回true,没有返回false,
    2 next(); 获取到当前游标位置上的元素,并移动到下一个位置,
    3 remove(); 删除当前位置上的元素,
 ArrayList<String> list = new ArrayList<>();
        list.add("c");
        list.add("b");
        list.add("a");
        list.add("e");
        list.add("h");
        Iterator<String> iterator = list.iterator(); //这是遍历
        while(iterator.hasNext()){//判断
            String next = iterator.next();//获取
            System.out.print(next);
        }
		//删除指定元素
		 Iterator<String> iterator = list.iterator();
        while(iterator.hasNext()){
            String next = iterator.next();
            if("a".equals(next)){
                iterator.remove();
            }
        }
        for(String str:list){
            System.out.print(str);
        }




package com.zixue.springbootmybatis.test;

import java.sql.SQLOutput;
import java.util.Arrays;
import java.util.OptionalInt;
import java.util.stream.IntStream;

/** 流的操作类型分为两种
 * 1 中间操作
 * 一个流可以进行多个中间操作 如:filter map 等
 * 2 终端操作
 *  一个流只有一个终端操作,当这个操作执行后,流就关闭了 count collect
 *
 * */
public class Testdemo {
    public static void main(String[] args) {
        //中间操作 filter 筛选 filter方法参数为一个条件
        int[] a = {1,2,3,4,5,6,6};
        IntStream stream = Arrays.stream(a);
        IntStream intStream = stream.filter(s -> s > 3);
        intStream.forEach(System.out::print);//4566
        System.out.println();
        //distinct 去重复元素
        IntStream stream0 = Arrays.stream(a);
        IntStream distinct0 = stream0.distinct();
        distinct0.forEach(System.out::print);//123456
        System.out.println();
        //limit对流进行分页显示
        IntStream stream1 = Arrays.stream(a);
        IntStream limit = stream1.limit(2);
        limit.forEach(System.out::print);//12
        System.out.println();
        //跳过流中的元素的个数 skip()
        IntStream stream2 = Arrays.stream(a);
        IntStream skip = stream2.skip(2);
        skip.forEach(System.out::print);
        System.out.println();
        //元素匹配
        IntStream stream3 = Arrays.stream(a);
        if(stream3.allMatch(s->s>3)){
            System.out.println("值都大于3");
        }else{
            System.out.println("不是都大于3");
        }
        //匹配元素有没有满足条件的
        IntStream stream4 = Arrays.stream(a);
        if(stream4.anyMatch(s->s>5)){
            System.out.println("有大于5的数");
        }else{
            System.out.println("都没有大于5的数");
        }
        //全部不匹配
        IntStream stream5 = Arrays.stream(a);
        if(stream5.noneMatch(s->s>1)){
            System.out.println("值都大于1");
        }else{
            System.out.println("不是都大于1");
        }
        /** 终端操作
         * */
        //查找 findFirst 查找第一个 findAny 随机找一个
        IntStream stream6 = Arrays.stream(a);
        OptionalInt first1 = stream6.filter(s -> s > 3).findFirst();
        System.out.println(first1.toString());



    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
团队液体流查看器(叉) 这是原始Team Liquid Streams扩展的分支,因为旧的开发人员没有维护/改进现有的扩展。 请在下面的评论部分或以下主题的线程提出功能请求:http://www.teamliquid.net/forum/viewmessage.php?topic_id=205002 Team Liquid Streams提供了一种在TeamLiquid上观看与Starcraft相关的流的简便方法.net它会保持最新列表,列出当前正在流媒体的人以及正在观看该流媒体的观众人数。 您还可以收藏要在每次再次开始广播时引起弹出式通知的流光。 您可以按收藏夹,视频流名称,是否推荐,视频流类型,种族和观众数进行排序。 现在,该扩展名还按用户名而不是所有者列出流,与TeamLiquid.net上的外观匹配。此外,现在还有一个选项屏幕,用于手动编辑您的收藏夹和隐藏列。 更新:现在启用了流类型过滤。0.0.2.0版:现在启用了竞赛过滤。0.0.2.5版:添加了一次手动刷新。 刷新是每10分钟一次,此外每10分钟会发生一次自动刷新。 0.0.2.6版:修复了没有种族选择的流不会显示的错误。 0.0.2.7版:修复了导致隐藏列时列无法正确移动的错误。 -由Bone_Idle版本0.0.2.8报告:修复了由于标签更改而导致“杂项”流不再显示的错误。版本0.0.2.9:添加了“语言等级”列。 默认情况下不显示,并显示所有三种评级类型。 0.0.3.0版:已更新以添加新类型(Dota2和LoL)。 选项页面应该可以再次正常工作。 0.0.3.1版:在选择过滤类型时,类型选择下拉列表保存用于节制的过滤器选择。0.0.3.4版:D3更新0.0.4.0版:HotS和WoL更新用户请求的通知警报现在在选项菜单0.0.4.1版切换: HotS和WoL的更新-> SC2 Chrome版本0.0.5.0的更新清单版本:输入EoL,因为我目前没有时间维护此版本,并且Google的新Chrome req需要大量重写。 支持语言:English
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值