Java中stream的简单使用

在Java8中,出现了stream流的概念。我个人认为,流的使用可以帮助我们更好的对数据集合进行迭代。

下面,先简单看一下普通for循环和stream流的代码。

public static void main(String[] args) {
        //取出偶数
        List<Integer> list = Arrays.asList(1,2,3,4);
        //1.for循环
        List<Integer> newList1 = new ArrayList<>();
        for (Integer integer : list) {
            if(integer % 2 == 0){
                newList1.add(integer);
            }
        }
        System.out.println(newList1);
        //2.stream流
        List<Integer> newList2 = list.stream().filter(x -> x % 2 == 0).collect(Collectors.toList());
        System.out.println(newList2);
    }

输出结果:

[2, 4]
[2, 4]

可以看出,对于stream流的使用,有时是可以简化我们代码的负责度,并且配合lambda表达式,可以让代码更加容易被人理解。

下面简单介绍一下Java中stream流的使用:

1.创建stream流

List集合创建创建:调用List的stream方法即可,如 list.stream()

数组的创建方式为:通过Arrays.stream()传入数组即可,如:Arrays.stream(new Integer[]{1,2})

注:stream流被创建出来之后只能被使用一次,如需再次循环需要再次创建!

2. 常用方法介绍:

流的方法被分为中间操作和终端操作,顾名思义,中间操作是指调用方法后生成新的流,可以继续执行操作,而终端操作则是结束流的使用。

中间操作:

  1.filter  过滤掉不符合的数据

  2.limit  只取前x条数据

  3.skip  跳过(删除)x条数据

  4.distinct  去重复数据

  5.sorted  排序

  6.map  对数据重整,生成新的数据流(如何从用户集合流中取出用户年龄作为新的流)

终端操作:

  1.count  统计数据数量

  2.forEach  对流中每个数据都执行传入的方法

  3.anyMatch  至少一个匹配,返回bool

  4.allMatch  匹配所有,返回bool

  5.collect  可以传入集合中的常用方法,例如:Collector.toList()将流转回集合,Collector.groupingBy()将流中数据分组

  6.reduce  进行归约操作,例如求和等

今天就先做了一下Java中stream流的简单使用介绍,谢谢。

 

转载于:https://www.cnblogs.com/hdllhd/p/9502662.html

### Java Stream API 使用实例 #### 创建流并执行简单操作 可以利用多种方式创建流对象。最常见的方式是从集合或数组创建流: ```java // 从列表创建流 List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); Stream<String> nameStream = names.stream(); ``` 一旦有了流,就可以对其应用各种中间操作和终端操作。比如过滤掉长度小于4的名字[^1]。 ```java nameStream.filter(name -> name.length() >= 4).forEach(System.out::println); ``` 上述代码会打印出`"Alice"` 和 `"Charlie"`因为这两个字符串的长度大于等于4。 #### 排序与转换 对于更复杂的场景,如先按一定条件筛选再排序最后收集结果到新的列表中也可以轻松实现: ```java List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); // distinct() 去重;sorted() 排序;collect(Collectors.toList()) 收集至新列表 List<Integer> sortedNumbers = numbers.stream().distinct().sorted().collect(Collectors.toList()); System.out.println(sortedNumbers); // 输出 [2, 3, 5, 7] ``` 这段代码展示了如何去除重复项、对整数进行升序排列并将最终的结果存储在一个新的列表里[^4]. #### 处理映射关系 当涉及到键值对的数据结构时,例如 `Map`, 流同样提供了强大的工具来进行处理。下面的例子演示了怎样计算每个单词出现次数,并返回一个按照频率降序排列的地图。 ```java Map<String, Long> wordCounts = words.stream() .collect(Collectors.groupingByConcurrent(Function.identity(), Collectors.counting())) .entrySet() .stream() .sorted(Map.Entry.<String, Long>comparingByValue(Comparator.reverseOrder())) .collect(Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new)); ``` 此段程序首先统计各个词语的数量,接着依据数量大小逆向排序这些条目,最后把它们重新组装成一个新的链接哈希表以便保持顺序[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值