Java集合类之---(Stream数据流)

Collection接口改进

  • 普通方法
    1. forEach()输出支持:default void forEach(Consumer<? super T> action)
    1. 取得Stream数据流对象:default Stream stream()
  • 使用forEach()输出:
public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<>() ;
Collections.addAll(list,"Java","C++","Python","PHP") ;
// 方法引用
list.forEach(System.out::println) ;
}
}

Stream操作

  • 将集合数据交给Stream之后,就相当于这些数据一个一个进行处理
数据过滤
  • 满足某些条件的内容才允许做数量统计
public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<>() ;
Collections.addAll(list,"Java","C++","Python","JavaScript") ;
// 实例化Stream对象
Stream<String> stream = list.stream() ;
// 统计出这些数据中带有Java的个数
System.out.println(stream.filter((e)->e.contains("Java")).count());
}
}
收集器
  • 希望在数据过滤后得到具体数据,就可以使用收集器来完成
  • 收集器:public <R, A> R collect(Collector<? super T, A, R> collector)
public static void main(String[] args) {
List<String> list = new ArrayList<>() ;
Collections.addAll(list,"Java","C++","Python","JavaScript") ;
// 实例化Stream对象
Stream<String> stream = list.stream() ;
// 收集过滤后的数据
System.out.println(stream.filter((e)->e.contains("Java"))
.collect(Collectors.toList()));
}
  • 收集完的数据依然属于List集合,所以可以直接使用List进行接收
skip与limit方法
  • 在Stream接口中重点有两个操作方法:
    1. 设置取出最大内容:public Stream limit(long maxSize)
    1. 跳过的数据量:public Stream skip(long n)
如下例子是【跳过 0 个,取 1 个进行操作】

 public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        Collections.addAll(list,"java","C++","Python","PHP");
        //实例化对象
        Stream<String> stream = list.stream();
        List<String> resultList = stream.skip(0).limit(1).map((s)->s.toUpperCase()).collect(Collectors.toList());
        System.out.println(resultList);
    }
  • 使用了skip()、limit()方法对数据做了分页处理

MapReduce基础模型

  • MapReduce是整个Stream的核心所在;操作也是由两个阶段所组成:

    1. map():指的是针对于数据进行先期的操作处理。例如:简单的数学运算等
    1. reduce():进行数据的统计分析
  • 在Stream接口中就提供有一个map结果变为Double型的操作:

  • 统计分析: public DoubleStream mapToDouble(ToDoubleFunction<? super T> mapper)

  • 返回的是一个DoubleStream接口对象

  • 统计方法:DoubleStream mapToDouble(ToDoubleFunction<? super T> mapper)

class Order {
private String title;
private double price;
private int amount;
public Order(String title, double price, int amount) {
this.title = title;
this.price = price;
this.amount = amount;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
}
public class Test {
public static void main(String[] args) {
List<Order> orderList = new ArrayList<>();
orderList.add(new Order("Iphone", 8999.99, 10));
orderList.add(new Order("外星人笔记本", 12999.99, 5));
orderList.add(new Order("MacBookPro", 18999.99, 5));
orderList.add(new Order("Java从入门到放弃.txt", 9.99, 20000));
orderList.add(new Order("中性笔", 1.99, 200000));
DoubleSummaryStatistics dss = orderList.stream().mapToDouble((obj) -> obj.getPrice() *
obj.getAmount())
.summaryStatistics();
System.out.println("总量: " + dss.getCount());
System.out.println("平均值: " + dss.getAverage());
System.out.println("最大值: " + dss.getMax());
System.out.println("最小值: " + dss.getMin());
System.out.println("总和: " + dss.getSum());
}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以提供一个示例:List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); int sum = list.stream().mapToInt(i -> i).sum(); System.out.println("Sum = " + sum); ### 回答2: 在Java中,可以使用Stream流来对数据进行归纳和处理。StreamJava 8中引入的一种处理数据集合的方式,可以将集合中的元素进行过滤、转换、排序等操作。 假设有一个学生类Student,包含学生的姓名、年龄和性别等信息。现在有一个Student对象的列表,我们需要对这个列表进行归纳。归纳可以包括统计学生人数、计算学生年龄平均值、筛选出指定条件的学生等操作。 首先,我们可以使用stream()方法将Student列表转换为一个流对象。然后,可以使用不同的Stream操作来进行归纳。比如,我们可以使用filter()方法筛选出年龄大于18的学生: List<Student> students = ...; List<Student> filteredStudents = students.stream().filter(s -> s.getAge() > 18).collect(Collectors.toList()); 接下来,我们可以使用count()方法统计学生人数: long count = students.stream().count(); 同时,我们可以使用mapToInt()方法将学生的年龄提取出来进行计算,然后使用average()方法计算年龄平均值: double averageAge = students.stream().mapToInt(Student::getAge).average().orElse(0); 除了上述常用的归纳操作外,Stream提供了丰富的操作方法,可以根据需求进行选择和组合。比如,可以使用sorted()方法对学生按照特定的属性进行排序,使用max()方法找出年龄最大的学生等。 综上所述,使用Java Stream流可以非常方便地对数据进行归纳操作,提高了代码的简洁性和可读性,同时也提升了程序的性能和效率。 ### 回答3: Java StreamJava 8中引入的一个强大的数据处理工具。使用Stream可以以一种简洁而高效的方式对数据进行处理和归纳。 首先,我们需要一个数据集合来进行归纳。假设我们有一个学生类Student,包含姓名、年龄和分数属性。我们要对一组学生进行归纳,计算总年龄和分数。 可以通过以下步骤来完成: 1. 创建一个学生列表: ``` List<Student> students = new ArrayList<>(); ``` 2. 向列表中添加学生对象: ``` students.add(new Student("张三", 18, 90)); students.add(new Student("李四", 20, 85)); students.add(new Student("王五", 19, 95)); ``` 3. 使用Stream对学生列表进行归纳: ``` int totalAge = students.stream() .mapToInt(Student::getAge) .sum(); int totalScore = students.stream() .mapToInt(Student::getScore) .sum(); ``` 首先,我们通过stream()方法将列表转换为流。然后,使用mapToInt()方法将学生对象的年龄和分数转换为对应的int值,并依次求和。 最后,我们可以打印出总年龄和总分数: ``` System.out.println("总年龄:" + totalAge); System.out.println("总分数:" + totalScore); ``` 以上代码将会输出: ``` 总年龄:57 总分数:270 ``` 通过Stream的链式操作,我们可以简单而高效地对数据进行归纳,避免了繁琐的循环和临时变量。同时,Stream提供了更多的数据处理方法,如过滤、排序、去重等,可以根据实际需求进行灵活应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值