JAVA的infinite_Java Infinite Stream

Java Stream API示例可generate infinite stream的数据/元素generate infinite stream 。 我们将使用Stream.generate()和Stream.iterate()方法来获取无限流。创建无限流是中间操作,因此直到执行管道的终端操作后才开始创建元素。

1. Stream.iterate()

1.1. Syntaxstatic Stream iterate(T seed, UnaryOperator f)

它返回无限的顺序有序流 。 Stream中的第一个元素(位置0)将是提供的seed 。 对于n > 0 ,位于位置n的元素将是对位于位置n - 1的元素应用函数f的结果。

1.2. Infinite IntStream example

在给定的示例中,我们正在创建一个从0开始的无限偶数流。 然后,我们从流中收集了前10个元素,并将它们收集到一个列表中。List ints = IntStream.iterate(0, i -> i + 2)

.mapToObj(Integer::valueOf)

.limit(10)

.collect(Collectors.toList());

System.out.println(ints);

Program output[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

2. Stream.iterate()

2.1. Syntaxstatic Stream generate(Supplier s)

它返回无限顺序无序流 ,其中每个元素由提供的Supplier生成。 这适用于生成恒定流,随机元素流等。

然后可以在流链中调用

2.2. Infinite stream of random numbers

下面的示例创建一个介于0和99之间的10个随机数的流。

List randomNumbers = Stream.generate(() -> (new Random()).nextInt(100))

.limit(10)

.collect(Collectors.toList());

System.out.println(randomNumbers);

Program output[26, 68, 0, 31, 8, 88, 35, 53, 98, 92]

2.3. Infinite stream of custom objects

以下示例创建了无限的员工流,并从流中抽取了前5名员工。List employees = Stream.generate(Employee::create)

.limit(5)

.collect(Collectors.toList());

System.out.println(employees);

Program output[Employee [id=-1631654733, name=, salary=0.0],

Employee [id=-398548285, name=, salary=0.0],

Employee [id=-649748457, name=, salary=0.0],

Employee [id=-779124834, name=, salary=0.0],

Employee [id=-868491671, name=, salary=0.0]]

哪里是Employee类:import java.io.Serializable;

import java.util.Random;

public class Employee implements Serializable {

private static final long serialVersionUID = 1L;

private static final Random r = new Random(Integer.MAX_VALUE);

private long id;

private String name;

private double salary;

public Employee(long id, String name, double salary) {

super();

this.id = id;

this.name = name;

this.salary = salary;

}

//Getters and setters

@Override

public String toString() {

return "Employee [id=" + id + ", name=" + name + ", salary=" + salary + "]";

}

public static Employee create() {

//Get the employee id in more predictable manner

//e.g. Max id present in databse + 1

Employee obj = new Employee(r.nextInt(), "", 0.0d);

return obj;

}

}

请问您有关在Java 8中创建无限流的问题。

Reference :

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值