返回包含单次出现的字符串的列表

时间:2017-08-09 12:07:04

标签: java string list java-8 java-stream

给定字符串列表,需要使用java(stream)返回没有重复的字符串列表(单次出现) 我尝试过使用distinct,但它不会得到单一的准确性

2 个答案:

答案 0 :(得分:2)

像这样......

List<String> result = Stream.of("A", "A", "BB", "C", "BB", "D")
            .collect(Collectors.groupingBy(
                         Function.identity(), 
                         Collectors.counting()))
            .entrySet()
            .stream()
            .filter(x -> x.getValue() == 1L)
            .map(Entry::getKey).collect(Collectors.toList());

System.out.println(result); // [C, D]

答案 1 :(得分:1)

可能是一个错误的问题,但你正在过滤列表中没有重复的条目......

所以这可行:  考虑一个列表,其中字符串C#和C ++是唯一没有重复的列表:

List<String> items = Arrays.asList("Java", "Java", "Java", "C++", "C", "C#", "C");

Map<String, Long> result = items.stream()
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

System.out.println(result);

Map<String, Long> filter = result.entrySet().stream().filter(x -> x.getValue() == 1)
        .collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue()));
System.out.println(filter);