Assert.assertTrue(i.intValue() % 2 == 0);
} else {
Assert.assertTrue(i.intValue() % 2 != 0);
不太优雅,可以使用filter代替
Stream<Integer> evenIntegers = ints.stream()
.filter(i -> i.intValue() % 2 == 0);
Stream<Integer> oddIntegers = ints.stream()
.filter(i -> i.intValue() % 2 != 0);
evenIntegers.forEach(i -> Assert.assertTrue(i.intValue() % 2 == 0));
oddIntegers.forEach(i -> Assert.assertTrue(i.intValue() % 2 != 0));
英文原文:
https://www.baeldung.com/java-8-streams-if-else-logic
在stream找那个传统的if else用法List<Integer> ints = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); ints.stream() .forEach(i -> { if (i.intValue() % 2 == 0) { Assert.assertT...
在
Stream
处理中,我们通常会遇到if/else的判断情况,对于这样的问题我们怎么处理呢?
还记得我们在上一篇文章lambda最佳实践中提到,lambda表达式应该越简洁越好,不要在其中写臃肿的业务
逻辑
。
接下来我们看一个具体的例子。
假如我们有一个1 to 10的list,我们想要分别挑选出奇数和偶数出来,传统的写法,我们会这样
使用
:
public void inForEach(){
List ints = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
if(xxxOrder != null){
if(xxxOrder.getXxxShippingInfo() != null){
if(xxxOrder.getXxxShippingInfo().getXxxShipmentDetails() != null){
在这篇文章里,我们将会去了解传统循环的一些替代方案。在
Java
8的新功能特性中,最棒的特性就是允许我们去表达我们想要完成什么而不是要怎样做。这正是循环的不足之处。要确保循环的灵活性是需要付出代价的。return、break 或者 continue都会显著地改变循环的实际表现。这迫使我们不仅要清楚我们要实现怎样的代码,还要了解循环是怎样工作的。
举例实体类:一篇文章拥有一个标题,一个作者...
程序猿开日常开发中,为了避免NullPointerException异常,会写很多if else的判断。如果if else太多会让代码显的很乱,那如何减少if else的
使用
呢?
减少if else的方式之一,利用JDK8提供的Optional。
代码示例:
示例中getStartTime()获取String类型的时间字符串并返回。执行
逻辑
:
调动selectStartTime()查询DB返回LocalDateTime值;
响应值dateTime如果为null,就给一个默认值;
响应值dateTime
Java
8 IF ELSE IF 优化现象解决方式if else ifswitch case弊端
Java
8的实现
在程序中总会看到或者碰到很多根据key判断要执行的方法代码等等,
![流程示意图](https://img-blog.csdnimg.cn/2020070413003275.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RjM
orElse(null)表示如果一个都没找到返回null。【orElse()中可以塞默认值。如果找不到就会返回orElse中你自己设置的默认值。】
orElseGet(null)表示如果一个都没找到返回null。【orElseGet()中可以塞默认值。如果找不到就会返回orElseGet中你自己设置的默认值。】
区别就是在
使用
方法时,即时时没有值 也会执行 orElse 内的方法, 而 orElseGet则不会。
@Test
public void test1(){
List<In
Java
8中的
Stream
API提供了一种新的方法来处理集合数据。
使用
Stream
API,可以方便地对集合数据进行过滤、转换和聚合操作。
Stream
API提供的toMap方法可以将一个流转换为Map。toMap接受两个函数,一个函数用于将流中的元素转换为键,另一个函数用于将流中的元素转换为值。
例如,如果有一个Person类,它有姓名和年龄两个属性,如下所示:
public class Person {
private String name;
private int age;
// 省略构造函数和getter、setter方法
现在有一个Person的列表,可以
使用
Stream
API和toMap方法将其转换为Map,其中键是人的姓名,值是Person对象:
List<Person> people = Arrays.asList(new Person("Alice", 20), new Person("Bob", 30));
Map<String, Person> map = people.
stream
().collect(Collectors.toMap(Person::getName, p -> p));
这样,就可以
使用
人的姓名来查找Person对象了:
Person alice = map.get("Alice");
如果流中的元素有重复的键,toMap方法会抛出IllegalStateException异常。可以
使用
toMap的重载版本来解决这个问题,该版本接受三个参数:键转换函数、值转换函数和合并函数。合并函数用于处理重复的键。
例如,假设有两个Person对象都有名字"Alice",可以使