Java 11从字符串数组中筛选字符串条目不起作用



我想从字符串数组中删除一个字符串条目和一个空字符串。

我的字符串数组包含从索引0到3的以下值-"Name"、"First"、"Last"、">

以下是我使用流API和Java 11 Predicate.not API进行的尝试:

Arrays.asList(myStringArray).stream()
.filter(Predicate.not(String::isEmpty).or(entry -> entry.equals("Name")))
.collect(Collectors.toList());

我希望条目";名称";以及"要从myStringArray中删除,我缺少什么?

另一种可能性:

var newList = new ArrayList<>(Arrays.asList(myStringArray));
newList.removeAll(List.of("", "Name"));

或者,如果你知道";名称";是总是第一个条目"如果总是最后一个条目,你可以这样做,因为它不需要任何东西的副本,所以性能更好:

var newList = Arrays.asList(myStringArray).subList(1, myStringArray.length - 1)

我的问题可能很糟糕,很抱歉,这是我想要的,它产生了我需要的期望结果-

Arrays.asList(myStringArray).stream()
.filter(Predicate.not(String::isEmpty))
.filter(Predicate.not(entry -> entry.equals("Name")))
.collect(Collectors.toList());

另一种不进行两次过滤器调用的方法是:

Arrays.asList(myStringArray).stream()
.filter(Predicate.not(String::isEmpty).and(entry -> !entry.equals("Name")))
.collect(Collectors.toList())

我认为您的问题是,您没有获取结果列表。问题是,这些项并没有从数组中删除,而是用没有删除项的项创建了新的列表。所以就这么做吧:

var newList = Arrays.asList(myStringArray).stream()
.filter(Predicate.not(String::isEmpty)).filter(Predicate.not(entry -> entry.equals("Name")))
.collect(Collectors.toList());```

最新更新