stream().sorted()中文排序,非空
时间: 2023-08-16 21:53:37 浏览: 211
对于在流中进行中文排序时,可以使用`Comparator`来指定排序规则。要确保对非空元素进行排序,您可以使用`filter`方法来过滤掉空元素,然后再进行排序。以下是一个示例代码:
```java
List<String> list = Arrays.asList("张三", "李四", "王五", "", "赵六", "田七");
List<String> sortedList = list.stream()
.filter(str -> !str.isEmpty()) // 过滤掉空字符串
.sorted(Comparator.naturalOrder()) // 使用自然排序(升序)
.collect(Collectors.toList());
System.out.println(sortedList);
```
在这个示例中,我们使用`filter`方法过滤掉空字符串,然后使用`sorted`方法进行排序,最后使用`collect`方法将排序后的元素收集到一个列表中。输出结果将会是:`[李四, 张三, 王五, 田七, 赵六]`。
请注意,这里使用的是自然排序(升序),如果您需要降序排序,可以使用`Comparator.reverseOrder()`方法来替代`Comparator.naturalOrder()`。
希望这个示例能够满足您的需求!如果还有其他问题,请随时提问。
相关问题
使用stream将放string的list按下划线分割取最后一个转换成数字并排序
在Java 8中,你可以使用Stream API来操作列表,包括对元素进行转换、筛选和排序。假设我们有一个`String`列表,每个元素都是由下划线分隔的词,我们需要提取最后一个单词(假设它是数字)并按数值大小排序。这里是如何实现的:
```java
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> timeList = Arrays.asList("one_two", "three_four", "ten", "eleven_twelve");
// 使用Stream处理列表
List<Integer> numbers = timeList.stream()
// 过滤非空时间
.filter(s -> !s.isEmpty())
// 提取最后一个单词(假设它是一个数字),通过正则表达式找到并转换为Integer
.map(s -> Integer.parseInt(s.split("_")[-1]))
// 去除重复
.distinct()
// 排序
.sorted()
.collect(Collectors.toList());
System.out.println(numbers); // 输出排序后的数字列表
}
}
```
这段代码首先创建了一个`String`列表,然后使用`stream()`方法将其转换为Stream。接着应用了一系列操作:`filter()`用于去除空字符串,`map()`将每个字符串拆分成单词并转换为整数,`distinct()`移除重复的数字,`sorted()`对数字进行升序排序,最后`collect()`收集结果到一个新的列表中。
阅读全文