java stream流根据条件替换值
时间: 2023-06-21 20:13:27 浏览: 71
可以使用Java 8中的Stream API和lambda表达式来实现根据条件替换值的操作。以下是一个例子:
假设我们有一个包含整数的列表,我们想将其中的偶数替换为它们的平方,而奇数保持不变。我们可以使用以下代码:
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> replacedNumbers = numbers.stream()
.map(n -> n % 2 == 0 ? n * n : n)
.collect(Collectors.toList());
```
在上面的代码中,我们使用`map`方法和一个lambda表达式来遍历列表中的每个元素。如果元素是偶数,则将其替换为其平方,否则保持不变。最后,我们使用`collect`方法将结果收集到一个新的列表中。
这样,`replacedNumbers`列表将包含以下值:`1, 4, 3, 16, 5`。
相关问题
java stream流根据条件替换部分对象属性值
可以使用Java 8中的Stream API和Lambda表达式来实现根据条件替换部分对象属性值的操作。
假设我们有一个Person类:
```java
public class Person {
private String name;
private int age;
private boolean isMale;
// 构造函数、getter、setter方法省略
}
```
现在我们需要将所有年龄大于等于18岁的男性的名字改为"Mr. "开头,可以使用以下代码:
```java
List<Person> personList = new ArrayList<>();
// 假设已经将数据添加到personList中
personList.stream()
.filter(person -> person.getAge() >= 18 && person.isMale())
.forEach(person -> person.setName("Mr. " + person.getName()));
```
首先使用stream()方法将List转换成Stream,然后使用filter()方法过滤出年龄大于等于18岁并且是男性的人,最后使用forEach()方法将符合条件的人的名字改为"Mr. "开头。
如果需要同时修改多个属性,可以使用Lambda表达式实现。例如,将所有年龄大于等于18岁的男性的名字改为"Mr. "开头,年龄加上10岁,可以使用以下代码:
```java
personList.stream()
.filter(person -> person.getAge() >= 18 && person.isMale())
.forEach(person -> {
person.setName("Mr. " + person.getName());
person.setAge(person.getAge() + 10);
});
```
注意,这种方式会修改原始的对象属性,因此需要谨慎使用。
Java stream流filter
Java Stream流的filter()方法用于筛选满足特定条件的元素,并将它们保留在流中。该方法接受一个Predicate函数式接口作为参数,用于定义筛选条件。
下面是一个示例,假设有一个包含整数的列表,我们希望筛选出大于10的元素:
```java
List<Integer> numbers = Arrays.asList(5, 10, 15, 20, 25, 30);
List<Integer> filteredNumbers = numbers.stream()
.filter(num -> num > 10)
.collect(Collectors.toList());
System.out.println(filteredNumbers); // 输出:[15, 20, 25, 30]
```
在上述示例中,我们首先将整数列表转换为流,然后使用filter()方法传入一个Lambda表达式,该表达式定义了筛选条件:num > 10。这将保留大于10的元素。最后,使用collect()方法将筛选后的元素收集到一个新的列表中。
你可以根据需要自定义不同的筛选条件,只需在Lambda表达式中替换为适当的条件即可。