java - Stream.dropWhile() 不会以两个不同的值返回正确的值
问题描述
我正在尝试学习 Java-9 中的新功能,我开始了解 Stream 的 dropWhile 方法,但它在两种不同的场景中返回不同的值。这是我的代码
package src.module;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.List;
public class Test {
public static void main(String[] args) {
String s[] = new String[3];
s[0] = "Hello";
s[1] = "";
s[2] = "World";
List<String> value = Stream.of(s).dropWhile(a -> a.isEmpty()).collect(Collectors.toList());
System.out.println(value);
List<String> values = Stream.of("a", "b", "c", "", "e", "f").dropWhile(d -> !d.isEmpty())
.collect(Collectors.toList());
System.out.println(values);
}
}
这是我得到的答案
[Hello, , World]
[, e, f]
我认为在第一个条件下它应该打印 [,World]。提前致谢。
解决方案
Java 9 中引入的dropWhile
方法将删除与谓词匹配的最长起始元素集。
如果此流是有序的,则在删除与给定谓词匹配的元素的最长前缀后,返回由该流的剩余元素组成的流。
因为您的条件是该项为空,且第一项不为空,所以什么都没有删除,保持["Hello", "", "World"]
原样。
最后,当您dropWhile
使用相反的条件调用时,不为空,前 3 个项目匹配并被删除,["", "e", "f"]
剩下的项目是剩余的项目。
这是预期的行为。
推荐阅读
- python - 如何在 Django 模型的 HTML 中呈现单选按钮?
- java - Java Validator 方法 validateProperty 可以验证内部具有多个字段的对象吗?
- sql - Postgres Sql 插入使用开始异常块错误
- c# - 如何操作 Visual Studios 开放缓冲区?/ 如何让我的自定义组件生成一个 nameof(element) 调用?
- python - 训练停留在 Epoch 3 PyTorch
- c# - 如何创建本地代理来处理 http 响应中的无效标头
- git - 在将 dev 重新定位到 main 之后,dev 前后提交的数量相同
- azure - Azure SQL 包含的用户。后端无法使用连接字符串进行连接
- excel - Excel中带有数据透视表的频率矩阵
- swift - 无法将画外音焦点转移到特定的 UICollectionView 单元格