我有这个 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/