java - 如果过滤器为 false,如何返回整个列表

标签 java arraylist collections java-8 java-stream

我有这个 list

List<String> lstStr = new ArrayList<>();
lstStr.add("1");
lstStr.add("2");
lstStr.add("3");
lstStr.add("4");
lstStr.add("5");

当我搜索字符串“1”时,它应该返回 List<String> = ["1"]如果搜索字符串不在列表中,例如 "0",它应该返回整个 List <String> =["1","2","3","4","5"] 。使用java流可以实现吗?请举个例子。

我已经使用下面的代码尝试过此操作,但当我搜索“0”时,我可以获得整个列表

List<String> filteredLst = lstStr.stream()
                                  .filter(data-> "1".equalsIgnoreCase(data))
                                  .collect(Collectors.toList());

filteredLst.forEach(data2 -> System.out.println(data2));

提前致谢。

最佳答案

您可以对谓词进行分区并返回非空列表:

Map<Boolean, List<String>> split = lstStr.stream()
        .collect(Collectors.partitioningBy("1"::equalsIgnoreCase));

List<String> filteredLst = split.get(Boolean.TRUE).isEmpty() ? 
                        split.get(Boolean.FALSE) : //can also use lstStr instead
                        split.get(Boolean.TRUE);

Collectors.partitioningBy("1"::equals) 将返回一个 2 条目映射,其中 true 将是满足您的过滤器的条目的键,并且false 其余部分的关键。

filteredLst 应包含映射到 true 的值(如果该值不为空),否则包含 false 的值(这肯定是与原始列表相同)

关于java - 如果过滤器为 false,如何返回整个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54454786/

相关文章:

java - Java中的函数式编程

java - 线程 "ajp-bio-8009-exec-1"中的异常

java - 独特的单词缩写替代解决方案?

java - 对 ArrayList 起作用的两种方法的同步

java - 将 ArrayList<> 转换为 TableView 的 ObservableList<>

c# - 为什么 .NET 中的排序集合没有匹配的接口(interface)?

java - 在 Java Applet 上捕获 WACOM 平板电脑事件

java - TreeSet 表现得很奇怪

java - 直接从Array中删除元素

java - 使一行代码难以阅读