MST

星途 面试题库

面试题:Java Stream中distinct与filter结合使用场景及示例

在一个包含重复元素的字符串列表List<String> words = Arrays.asList("apple", "banana", "apple", "cherry", "banana"); 中,先使用filter方法筛选出长度大于5的字符串,再使用distinct方法去除重复元素,最后将结果按字母顺序排序并输出。请写出实现代码,并解释distinct与filter结合在此场景中的作用。
15.3万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StringProcessing {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("apple", "banana", "apple", "cherry", "banana");
        List<String> result = words.stream()
               .filter(str -> str.length() > 5)
               .distinct()
               .sorted()
               .collect(Collectors.toList());
        System.out.println(result);
    }
}

distinct与filter结合在此场景中的作用

  1. filter的作用
    • filter(str -> str.length() > 5) 这一步是根据字符串长度进行筛选。它会遍历列表中的每个字符串,仅保留长度大于5的字符串。在这个例子中,只有 "banana""cherry" 长度大于5,因此其他字符串(如 "apple")会被过滤掉。这样可以减少后续处理的数据量,专注于符合长度条件的字符串。
  2. distinct的作用
    • distinct() 方法用于去除流中的重复元素。在经过 filter 筛选后,可能仍然存在重复的字符串(例如,可能有多个长度大于5的相同字符串)。distinct 方法会基于元素的 equals 方法来判断元素是否重复,并去除重复的元素。在这个例子中,如果 filter 后有多个 "banana"distinct 会确保最终结果中只有一个 "banana"。结合 filter 使用,可以保证最终输出的结果既满足长度条件,又没有重复元素。