Jdk8 list stream流用法举例
时间: 2023-09-21 15:10:37 浏览: 87
好的,以下是 JDK8 中 List Stream 的用法举例:
假设我们有一个 List<Integer>,里面存放了一些整数,我们想要对这些整数进行一些操作,比如筛选出大于 5 的数,然后将它们平方后求和。可以使用以下代码实现:
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int sum = numbers.stream() // 转换成 Stream
.filter(n -> n > 5) // 筛选出大于 5 的数
.map(n -> n * n) // 将数平方
.reduce(0, Integer::sum); // 求和
System.out.println(sum); // 输出结果为 255
```
上述代码中,我们首先将 List 转换成 Stream,然后使用 filter 方法筛选出大于 5 的数,接着使用 map 方法将数平方,最后使用 reduce 方法求和。最终输出结果为 255。
除了上述方法,还有很多其他的 List Stream 方法,比如 sorted、distinct、limit、skip 等等。可以根据需求使用相应的方法对 List 进行操作。
相关问题
jdk8中使用stream流的collect(Collectors.toList())方法,修改返回方法对应的实体类User,会不会修改原来的List<User>,请举例说明
不会修改原来的List<User>,但是如果List<User>中的元素是可变的对象,修改元素的属性会对原对象产生影响。
例如,假设有一个User类如下所示:
```java
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
```
现在我们有一个List<User>,其中包含两个User对象:
```java
List<User> userList = new ArrayList<>();
userList.add(new User("张三", 20));
userList.add(new User("李四", 22));
```
我们使用Stream的`map()`方法将List<User>中的每个User对象的年龄加1,然后使用`collect(Collectors.toList())`方法将Stream转换为List<User>:
```java
List<User> newList = userList.stream()
.map(user -> {
user.setAge(user.getAge() + 1);
return user;
})
.collect(Collectors.toList());
```
此时新的List<User>中的元素已经被修改,但是原来的List<User>中的元素没有被修改:
```java
System.out.println(userList.get(0).getAge()); // 输出20
System.out.println(newList.get(0).getAge()); // 输出21
```
因此,虽然我们使用Stream的`map()`方法修改了List<User>中的元素,但是原来的List<User>没有被修改。
阅读全文