常用Java-Stream学习

改文章的理解都是作者自己的理解,哪里不对的地方还希望指出!!!!! 

一、distince()

作用:去掉流中的重复元素

public static void main(String[] args) {
        List<Integer> distinct_list = new ArrayList<>(Arrays.asList(1,1,2,2,33,34));          
      List<Integer>tem_list=distinct_list.stream().distinct().collect(Collectors.toList());
        Stream<Integer> stream = count_list.stream().distinct();
        System.out.println(tem_list);
    }

运行结果:[1, 2, 33, 34]

二、count ()

作用:计算流中元素的个数

 public static void main(String[] args) {
        List<Integer> count_list = new ArrayList<>(Arrays.asList(1,1,2,2,33,34));
        Long tem_list_count = count_list.stream().count();
        System.out.println(tem_list_count);
    }

 运行结果:6

三、Arrays.stream()和Stream.of()

作用:创建Stream流

public static void main(String[] args) {
        String [] array = new String[]{"你好","世界"};
        Stream<String> arrays_string = Arrays.stream(array);
        Stream<String> of_string = Stream.of(array);
        List<String> arrays_list = arrays_string.collect(Collectors.toList());
        List<String> of_list = of_string.collect(Collectors.toList());
        System.out.println("Arrays.stream -> " + arrays_list);
        System.out.println("Stream.of -> " + of_list);
    }

运行结果: Arrays.stream -> [你好, 世界]
                   Stream.of -> [你好, 世界]

注意: Stream.of()的执行代码其实调用的是Arrays.stream()。

public static<T> Stream<T> of(T... values) {
        return Arrays.stream(values);
    }

四、filter() 

作用:过滤掉不符合条件的元素,得到自己想要的元素集合

public static void main(String[] args) {
        List<Integer> filter_list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6));
        System.out.println(filter_list.stream().filter(k -> {
            return k > 3;
        }).collect(Collectors.toList()));
    }

运至结果:[4, 5, 6]

 注意:

1、
System.out.println(filter_list.stream().filter(k -> {
            return k > 3;
        }).collect(Collectors.toList()));

2、
System.out.println(filter_list.stream().filter(k -> k > 3).collect(Collectors.toList()));

1、2代码是一样的原理,学过C++的都知道Lambda表达式,k就相当于filter方法的形参,通过条件语句进行判断返回

 五、map()

功能:映射,将一个流中的某个元素转换为另外一种形式的流。

public static void main(String[] args) {
        List<Integer> filter_list = new ArrayList<>(Arrays.asList(2, 4, 6, 8, 10, 12));
        System.out.println(filter_list.stream().map(k -> {
            return k / 2;
        }).collect(Collectors.toList()));
    }

运行结果:1,2,3,4,5,6

六、 anyMatch()和allMatch()

功能:匹配元素,anyMatch()若有一个条件返回true,反之false,allMatch()若所有都满足条件返回true,反之false

public static void main(String[] args) {
        List<Integer> filter_list = new ArrayList<>(Arrays.asList(2, 4, 6, 8, 10, 12));
        System.out.println(filter_list.stream().anyMatch(k -> k > 6));
        System.out.println(filter_list.stream().allMatch(k -> k > 6));
    }

运行结果:true
                false

七、skip()和limit()

skip(n)功能:丢弃第n个元素前面的元素

limit(n)功能:只要n个元素

skip()加上limit()功能组合起来就可以形成分页功能

 public static void main(String[] args) {
        List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6));
        List<Integer> skip_list = list.stream().skip(2).collect(toList());
        List<Integer> limit_list = list.stream().limit(3).collect(toList());
        System.out.println("skip_list = " + skip_list);
        System.out.println("limit_list = " + limit_list);
        final int[] i = {-2};
        List<List<Integer>> skip_limit_list = list.stream().map(k -> {
            return list.stream().skip(i[0] += 2).limit(2).collect(toList());
        }).collect(toList());
        System.out.println("skip_limit_list = " + skip_limit_list);
    }

运行结果:skip_list = [3, 4, 5, 6]
                  limit_list = [1, 2, 3]
                  skip_limit_list = [[1, 2], [3, 4], [5, 6], [], [], []]

八、split() 

功能:分割,会返回一个String[]

  public static void main(String[] args) {
        String string = "hellow world";
        List<String[]> list = Stream.of(string).map(k -> k.split("")).collect(toList());
        list.stream().flatMap(Arrays::stream).forEach(System.out::print);
        String ipString = "192.168.100.123";//ip分割
        System.out.println();
        List<Integer> ip_list = Stream.of(ipString).map(k -> {
            List<Integer> list1 = new ArrayList<>();
            for (String s : k.split("\\.")) {
                list1.add(Integer.valueOf(s));
            }
            return list1;
        }).flatMap(List::stream).collect(toList());
        System.out.println(ip_list);
    }

执行结果: hellow world
                   [192, 168, 100, 123]

注意 :. 、 $、 | 和 * 等转义字符,必须得加 \\。多个分隔符,可以用 | 作为连字符。

 九、flatMap()

功能:将分流合并至主流

三个例子带你了解flatMap()

public static void main(String[] args) {
//List嵌套
        List<List<Integer>> integers_list_list = new ArrayList<>(Arrays.asList(
                Arrays.asList(1, 2, 3, 4),
                Arrays.asList(2, 3, 4, 5),
                Arrays.asList(3, 4, 5, 6)));
        integers_list_list.stream().flatMap(List::stream).distinct().collect(toList()).forEach(t -> System.out.print(t + ","));
        System.out.println();
//List-List嵌套
        List<List<List<Integer>>> integers_list_list_List
                = new ArrayList<>(Arrays.asList(
                Arrays.asList(Arrays.asList(1, 2), Arrays.asList(3, 4)),
                Arrays.asList(Arrays.asList(5, 6), Arrays.asList(7, 8)),
                Arrays.asList(Arrays.asList(9, 10), Arrays.asList(11, 12)))
        );
//一层flatMap()
        integers_list_list_List.stream().flatMap(List::stream).collect(toList()).forEach(t -> System.out.print(t + ","));
        System.out.println();
//两层flatMap()        

integers_list_list_List.stream().flatMap(List::stream).flatMap(List::stream).collect(toList()).forEach(t -> System.out.print(t + ","));
    }

运行结果:

 1,2,3,4,5,6,
[1, 2],[3, 4],[5, 6],[7, 8],[9, 10],[11, 12],
1,2,3,4,5,6,7,8,9,10,11,12,

十、max()和min()

功能:通过排序找到最大值和最小值(使用其中一个即可达到两种效果)

 public static void main(String[] args) {
        List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6));
        System.out.println("k1 - k2 (max) -> " + list.stream().max((k1, k2) -> k1 - k2).get());
        System.out.println("k2 - k1 (max) -> " + list.stream().max((k1, k2) -> k2 - k1).get());
        System.out.println("k1 - k2 (min) -> " + list.stream().min((k1, k2) -> k1 - k2).get());
        System.out.println("k2 - k1 (min) -> " + list.stream().min((k1, k2) -> k2 - k1).get());
    }

运行结果:

k1 - k2 (max) -> 6
k2 - k1 (max) -> 1
k1 - k2 (min) -> 1
k2 - k1 (min) -> 6

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值