跨出边界
发布于 2024-01-10 / 39 阅读 / 0 评论 / 0 点赞

Java Collectors都有哪些实用函数

java Collectors都有哪些实用函数

在Java中,Collectors类提供了许多用于收集流元素的静态方法。下面是一些常用的Collectors方法:

  1. toList():将流元素收集到List中。

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class ToListCollectorExample {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");

        List<String> collectedList = words.stream()
                .collect(Collectors.toList());

        System.out.println(collectedList);
    }
}

输出结果:

[apple, banana, cherry, date, elderberry]
  1. toSet():将流元素收集到Set中。

import java.util.Arrays;
import java.util.Set;
import java.util.stream.Collectors;

public class ToSetCollectorExample {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");

        Set<String> collectedSet = words.stream()
                .collect(Collectors.toSet());

        System.out.println(collectedSet);
    }
}

输出结果:

[banana, elderberry, cherry, apple, date]
  1. toMap():将流元素收集到Map中。

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class ToMapCollectorExample {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");

        Map<String, Integer> wordLengthMap = words.stream()
                .collect(Collectors.toMap(word -> word, String::length));

        System.out.println(wordLengthMap);
    }
}

输出结果:

{apple=5, banana=6, cherry=6, date=4, elderberry=10}
  1. joining():将流元素连接成一个字符串。

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class JoiningCollectorExample {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");

        String joinedString = words.stream()
                .collect(Collectors.joining(", "));

        System.out.println(joinedString);
    }
}

输出结果:

apple, banana, cherry, date, elderberry
  1. groupingBy():根据指定的分类函数将流元素分组。

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class GroupingByCollectorExample {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");

        Map<Integer, List<String>> wordLengthMap = words.stream()
                .collect(Collectors.groupingBy(String::length));

        System.out.println(wordLengthMap);
    }
}

输出结果:

{4=[date], 5=[apple], 6=[cherry, banana], 10=[elderberry]}
  1. partitioningBy():根据指定的条件将流元素分为两组。

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class PartitioningByCollectorExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        Map<Boolean, List<Integer>> evenOddMap = numbers.stream()
                .collect(Collectors.partitioningBy(number -> number % 2 == 0));

        System.out.println(evenOddMap);
    }
}

输出结果:

{false=[1, 3, 5], true=[2, 4]}
  1. mapping():对流元素进行映射后收集。

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class MappingCollectorExample {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");

        List<Integer> wordLengths = words.stream()
                .collect(Collectors.mapping(String::length, Collectors.toList()));

        System.out.println(wordLengths);
    }
}

输出结果:

[5, 6, 6, 4, 10]
  1. joining()函数的示例代码:

    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
    
    public class Example {
        public static void main(String[] args) {
            List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Eva");
    
            // 使用joining函数将名字连接成一个字符串
            String result = names.stream()
                    .collect(Collectors.joining());
    
            System.out.println(result);
        }
    }
    

    运行这段代码,输出结果为:

    AliceBobCharlieDavidEva
    

    在这个示例中,我们使用joining()函数将名字连接成一个字符串。由于没有指定分隔符、前缀和后缀,所以名字直接连接在一起。

  2. 带有分隔符、前缀和后缀的joining(delimiter, prefix, suffix)函数的示例代码:

    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
    
    public class Example {
        public static void main(String[] args) {
            List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Eva");
    
            // 使用joining函数将名字连接成一个字符串,使用逗号作为分隔符,并在开头和结尾添加方括号
            String result = names.stream()
                    .collect(Collectors.joining(", ", "[", "]"));
    
            System.out.println(result);
        }
    }
    

    运行这段代码,输出结果为:

    [Alice, Bob, Charlie, David, Eva]
    

    在这个示例中,我们使用joining(delimiter, prefix, suffix)函数将名字连接成一个字符串,使用逗号作为分隔符,并在开头和结尾添加方括号。这样,我们得到了一个格式化的名字列表字符串。


评论