我想從字符串列表中刪除空字符串。Java 8 - 從List中過濾空字符串不工作
這裏是我的嘗試,使用流API:
list.stream().filter(item-> !item.isEmpty()).collect(Collectors.toList());
和空字符串仍然存在在列表中。我錯過了什麼?
我想從字符串列表中刪除空字符串。Java 8 - 從List中過濾空字符串不工作
這裏是我的嘗試,使用流API:
list.stream().filter(item-> !item.isEmpty()).collect(Collectors.toList());
和空字符串仍然存在在列表中。我錯過了什麼?
filter()
保持匹配謂詞的元素。 Soyou需要逆謂詞:
list.stream().filter(item-> !item.isEmpty()).collect(Collectors.toList());
這也不會修改原始列表。它將創建原始列表的過濾副本。因此,你需要
list = list.stream().filter(item-> !item.isEmpty()).collect(Collectors.toList());
如果要修改原來的列表中,你應該使用
list.removeIf(item -> item.isEmpty());
或者乾脆
list.removeIf(String::isEmpty);
我錯過了!在問題中。我的問題是我沒有保持結果。我雖然該過濾器()修改原來的列表。 – stackUnderflow
您正在刪除非空字符串(請檢查您的過濾條件)。嘗試:
list.stream().filter(item -> !item.isEmpty()).collect(Collectors.toList());
否則,你可能需要檢查你刪除空格以及:
list.stream().filter(item -> !item.trim().isEmpty()).collect(Collectors.toList());
也許字符串中包含空格?替換item -> item.isEmpty()
與item -> !item.trim().isEmpty()
我懷疑你不保留結果。結果被返回,原始列表不會被更改,因爲這是函數式編程風格。
list = list.stream().filter(item-> !item.trim().isEmpty()).collect(Collectors.toList());
你是不是從列表中刪除空字符串,你是檢索它們。你的過濾條件是錯誤的。
嘗試這樣的:
List<String> collect = list.stream().filter(item -> !item.trim().isEmpty()).collect(Collectors.toList());
你正在收集空元素:)
你想要的不是空的,所以反轉謂語
List<String> xxx = list.stream().filter(item -> !item.isEmpty()).collect(Collectors.toList());
此外,該流不被修改原始列表,所以Collect(Collectrors.toList())
正在返回謂詞的結果:)
你可以按照下面的例子,它可以幫助你
String[] firstArray = {"test1", "", "test2", "test4", "", null};
firstArray = Arrays.stream(firstArray).filter(s -> (s != null && s.length() > 0)).toArray(String[]::new);
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5-SNAPSHOT</version>
</dependency>
import org.apache.commons.lang3.StringUtils;
//Java8 new api
strings.removeIf(StringUtils::isBlank);
//stream strings=strings.stream().filter(StringUtils::isNotBlank).collect(Collectors.toList());
是不是'字符串:: isEmpty'? – Tschallacka
你是否將返回值分配給某個變量? – ItamarG3
你不想保留*不*爲空的項目嗎?你只保留空的。 –