前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >80个JAVA8函数式编程中关于集合的操作实例(持续更新增加实例)

80个JAVA8函数式编程中关于集合的操作实例(持续更新增加实例)

作者头像
青山师
发布于 2023-05-05 12:14:50
发布于 2023-05-05 12:14:50
1K00
代码可运行
举报
运行总次数:0
代码可运行

JAVA8函数式编程中关于集合的各种操作实例(持续更新增加实例)

map - 将集合中的每个元素映射为另一个元素 示例:将数字集合中的每个元素平方并返回平方后的集合。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> squaredNums = nums.stream().map(n -> n * n).collect(Collectors.toList());

filter - 过滤不符合条件的元素,留下符合条件的元素 示例:从字符串集合中过滤出长度大于等于 5 的字符串,并返回过滤后的集合。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> words = Arrays.asList("apple", "banana", "orange", "pear", "peach");
List<String> longWords = words.stream().filter(word -> word.length() >= 5).collect(Collectors.toList());

reduce - 将集合中的所有元素组合成一个值 示例:计算数字集合中所有元素的和。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
int sum = nums.stream().reduce(0, (a, b) -> a + b);

forEach - 对集合中的每个元素执行某个操作 示例:打印数字集合中的每个元素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
nums.forEach(System.out::println);

sorted - 对集合中的元素进行排序 示例:对字符串集合按照长度进行升序排序。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> words = Arrays.asList("apple", "banana", "orange", "pear", "peach");
List<String> sortedWords = words.stream().sorted((a, b) -> a.length() - b.length()).collect(Collectors.toList());

distinct - 去除集合中的重复元素 示例:从数字集合中去除重复元素,并返回去重后的集合。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(1, 2, 3, 2, 4, 5, 3, 1);
List<Integer> distinctNums = nums.stream().distinct().collect(Collectors.toList());

limit - 截取集合中的前n个元素 示例:从数字集合中选出前3个元素,并返回截取后的集合。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> limitedNums = nums.stream().limit(3).collect(Collectors.toList());

skip - 跳过集合中的前n个元素 示例:从数字集合中跳过前3个元素,并返回剩余的元素组成的集合。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> skippedNums = nums.stream().skip(3).collect(Collectors.toList());

max - 找出集合中的最大值 示例:找出数字集合中的最大值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
int maxNum = nums.stream().max(Integer::compare).orElseThrow(NoSuchElementException::new);

min - 找出集合中的最小值 示例:找出数字集合中的最小值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
int minNum = nums.stream().min(Integer::compare).orElseThrow(NoSuchElementException::new);

anyMatch - 判断集合中是否存在符合条件的元素 示例:判断数字集合中是否存在偶数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
boolean hasEven = nums.stream().anyMatch(n -> n % 2 == 0);

allMatch - 判断集合中的所有元素是否都符合条件 示例:判断数字集合中是否所有元素都是偶数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(2, 4, 6, 8, 10);
boolean allEven = nums.stream().allMatch(n -> n % 2 == 0);

noneMatch - 判断集合中是否不存在符合条件的元素 示例:判断数字集合中是否不存在负数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
boolean noNegative = nums.stream().noneMatch(n -> n < 0);

findFirst - 找出集合中第一个符合条件的元素 示例:从数字集合中找出第一个偶数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
int firstEven = nums.stream().filter(n -> n % 2 == 0).findFirst().orElseThrow(NoSuchElementException::new);

findAny - 找出集合中任意一个符合条件的元素 示例:从数字集合中找出任意一个偶数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
Optional<Integer> anyEven = nums.stream().filter(n -> n % 2 == 0).findAny();

count - 统计集合中符合条件的元素个数 示例:统计数字集合中偶数的个数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
long evenCount = nums.stream().filter(n -> n % 2 == 0).count();

flatMap - 将嵌套集合中的元素展平成一维集合 示例:将二维数字集合中的所有元素展平成一维集合,并去重后返回。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<List<Integer>> nums = Arrays.asList(Arrays.asList(1, 2), Arrays.asList(2, 3), Arrays.asList(3, 4));
List<Integer> flattenedNums = nums.stream().flatMap(Collection::stream).distinct().collect(Collectors.toList());

partitioningBy - 根据条件对集合进行分区,分成两个区域,符合条件的在一个区域,不符合条件的在另一个区域 示例:将数字集合分成奇数和偶数两个区域,并返回分区后的结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
Map<Boolean, List<Integer>> partitionedNums = nums.stream().collect(Collectors.partitioningBy(n -> n % 2 == 0));

groupingBy - 根据条件对集合进行分组 示例:将字符串集合按照首字母进行分组,并返回分组后的结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> words = Arrays.asList("apple", "banana", "orange", "pear", "peach");
Map<Character, List<String>> groupedWords = words.stream().collect(Collectors.groupingBy(word -> word.charAt(0)));

toSet - 将集合转换为Set类型 示例:将数字集合转换为Set类型,并返回转换后的结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
Set<Integer> numSet = nums.stream().collect(Collectors.toSet());

toMap - 将集合转换为Map类型 示例:将字符串集合按照长度作为键创建Map,并返回创建后的Map。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> words = Arrays.asList("apple", "banana", "orange", "pear", "peach");
Map<Integer, String> wordMap = words.stream().collect(Collectors.toMap(String::length, Function.identity()));

toCollection - 自定义集合类型 示例:将数字集合转换为LinkedList类型,并返回转换后的结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
LinkedList<Integer> linkedList = nums.stream().collect(Collectors.toCollection(LinkedList::new));

toArray - 将集合转换为数组类型 示例:将数字集合转换为数组类型,并返回转换后的结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
Integer[] numArr = nums.stream().toArray(Integer[]::new);

concat - 连接两个集合 示例:将两个字符串集合连接起来,并返回连接后的集合。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> words1 = Arrays.asList("apple", "banana");
List<String> words2 = Arrays.asList("orange", "pear", "peach");
List<String> concatenatedWords = Stream.concat(words1.stream(), words2.stream()).collect(Collectors.toList());

peek - 对流中的每个元素进行调试操作,不改变流中元素的值 示例:打印数字集合中的偶数,并返回原始流。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
nums.stream().peek(n -> {
  if (n % 2 == 0) {
    System.out.println(n);
  }
}).collect(Collectors.toList());

flatMapToInt - 将集合中的元素展平为int类型的一维数组 示例:将二维数字集合中的所有元素展平为int类型的一维数组,并返回。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<List<Integer>> nums = Arrays.asList(Arrays.asList(1, 2), Arrays.asList(2, 3), Arrays.asList(3, 4));
int[] flattenedNums = nums.stream().flatMapToInt(list -> list.stream().mapToInt(Integer::intValue)).toArray();

flatMapToLong - 将集合中的元素展平为long类型的一维数组 示例:将二维数字集合中的所有元素展平为long类型的一维数组,并返回。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<List<Long>> nums = Arrays.asList(Arrays.asList(1L, 2L), Arrays.asList(2L, 3L), Arrays.asList(3L, 4L));
long[] flattenedNums = nums.stream().flatMapToLong(list -> list.stream().mapToLong(Long::longValue)).toArray();

flatMapToDouble - 将集合中的元素展平为double类型的一维数组 示例:将二维数字集合中的所有元素展平为double类型的一维数组,并返回。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<List<Double>> nums = Arrays.asList(Arrays.asList(1.0, 2.0), Arrays.asList(2.0, 3.0), Arrays.asList(3.0, 4.0));
double[] flattenedNums = nums.stream().flatMapToDouble(list -> list.stream().mapToDouble(Double::doubleValue)).toArray();

summarizeInt - 统计集合中元素的总和、个数、最大值、最小值和平均值 示例:统计数字集合中元素的总和、个数、最大值、最小值和平均值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
IntSummaryStatistics stats = nums.stream().mapToInt(Integer::intValue).summaryStatistics();
int sum = stats.getSum();
int count = stats.getCount();
int max = stats.getMax();
int min = stats.getMin();
double average = stats.getAverage();

summarizeLong - 统计集合中元素的总和、个数、最大值、最小值和平均值 示例:统计Long类型数字集合中元素的总和、个数、最大值、最小值和平均值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Long> nums = Arrays.asList(1L, 2L, 3L, 4L, 5L);
LongSummaryStatistics stats = nums.stream().mapToLong(Long::longValue).summaryStatistics();
long sum = stats.getSum();
long count = stats.getCount();
long max = stats.getMax();
long min = stats.getMin();
double average = stats.getAverage();

summarizeDouble - 统计集合中元素的总和、个数、最大值、最小值和平均值 示例:统计double类型数字集合中元素的总和、个数、最大值、最小值和平均值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Double> nums = Arrays.asList(1.0, 2.0, 3.0, 4.0, 5.0);
DoubleSummaryStatistics stats = nums.stream().mapToDouble(Double::doubleValue).summaryStatistics();
double sum = stats.getSum();
long count = stats.getCount();
double max = stats.getMax();
double min = stats.getMin();
double average = stats.getAverage();

reduce(Map.Entry<K, V> identity, BinaryOperator<Map.Entry<K, V>> accumulator, BinaryOperator<Map.Entry<K, V>> combiner) - 根据给定的初始值和累加器将元素逐个结合,类似于reduce操作,只不过针对Map的键值对 示例:将字符串集合中的所有元素按照首字母分组,并统计每个分组中元素的个数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> words = Arrays.asList("apple", "banana", "orange", "pear", "peach");
Map<Character, Integer> wordCountMap = words.stream().reduce(
  new HashMap<Character, Integer>(), 
  (map, word) -> {
    char firstChar = word.charAt(0);
    map.put(firstChar, map.getOrDefault(firstChar, 0) + 1);
    return map;
  }, 
  (map1, map2) -> {
    map2.forEach((key, value) -> map1.merge(key, value, Integer::sum));
    return map1;
  }
);

matching(Predicate predicate) - 判断流中是否有元素满足给定的条件,返回一个boolean类型的值 示例:判断数字集合中是否存在大于10的元素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5, 10, 20, 30);
boolean hasLargeNum = nums.stream().anyMatch(n -> n > 10);

peek(Consumer action) - 对流中每个元素执行给定的操作,返回一个新流 示例:将字符串集合中的所有元素转换为大写,并返回转换后的集合。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> words = Arrays.asList("apple", "banana", "orange", "pear", "peach");
List<String> upperCaseWords = words.stream().peek(word -> word.toUpperCase()).collect(Collectors.toList());

sorted(Comparator comparator) - 使用给定的比较器对流进行排序 示例:将数字集合按照绝对值进行升序排序,并返回排序后的集合。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(-2, 1, 3, -4, 5);
List<Integer> sortedNums = nums.stream().sorted(Comparator.comparing(Math::abs)).collect(Collectors.toList());

limit(long maxSize) - 返回一个不超过指定数量的元素的流 示例:返回数字集合中前3个正整数,并返回截取后的集合。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(-2, 1, 3, -4, 5);
List<Integer> limitedNums = nums.stream().filter(n -> n > 0).limit(3).collect(Collectors.toList());

skip(long n) - 跳过指定数量的元素,返回剩余元素组成的流 示例:跳过数字集合中前3个负整数,并返回剩余的元素组成的集合。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> nums = Arrays.asList(-2, 1, 3, -4, 5);
List<Integer> skippedNums = nums.stream().filter(n -> n > 0).skip(3).collect(Collectors.toList());

遍历集合中的元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> list = Arrays.asList("apple", "banana", "orange");
list.forEach(System.out::println);

过滤集合中的元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> filteredList = list.stream()
        .filter(s -> s.startsWith("a"))
        .collect(Collectors.toList());
System.out.println(filteredList);

映射集合中的元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> list = Arrays.asList("apple", "banana", "orange");
List<Integer> lengths = list.stream()
        .map(String::length)
        .collect(Collectors.toList());
System.out.println(lengths);

统计集合中的元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
IntSummaryStatistics stats = list.stream().mapToInt((x) -> x).summaryStatistics();
System.out.println("Max: " + stats.getMax());
System.out.println("Min: " + stats.getMin());
System.out.println("Sum: " + stats.getSum());
System.out.println("Average: " + stats.getAverage());

排序集合中的元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> sortedList = list.stream()
        .sorted()
        .collect(Collectors.toList());
System.out.println(sortedList);

取出集合中的前n个元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> subList = list.stream()
        .limit(3)
        .collect(Collectors.toList());
System.out.println(subList);

跳过集合中的前n个元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> subList = list.stream()
        .skip(3)
        .collect(Collectors.toList());
System.out.println(subList);

合并两个集合

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> list1 = Arrays.asList("apple", "banana");
List<String> list2 = Arrays.asList("orange", "grape");
List<String> mergedList = Stream.concat(list1.stream(), list2.stream())
        .collect(Collectors.toList());
System.out.println(mergedList);

判断集合中是否存在满足条件的元素

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> list = Arrays.asList("apple", "banana", "orange");
boolean hasMatch = list.stream()
        .anyMatch(s -> s.startsWith("a"));
System.out.println(hasMatch);

判断集合中所有元素是否都满足条件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> list = Arrays.asList("apple", "banana", "orange");
boolean allMatch = list.stream()
        .allMatch(s -> s.length() > 3);
System.out.println(allMatch);

判断集合中是否所有元素都不满足条件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> list = Arrays.asList("apple", "banana", "orange");
boolean noneMatch = list.stream()
        .noneMatch(s -> s.contains("pear"));
System.out.println(noneMatch);

将集合中的元素连接成一个字符串

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> list = Arrays.asList("apple", "banana", "orange");
String joined = list.stream()
        .collect(Collectors.joining(", "));
System.out.println(joined);

将集合中的元素分组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> list = Arrays.asList("apple", "banana", "orange");
Map<Integer, List<String>> grouped = list.stream()
        .collect(Collectors.groupingBy(String::length));
System.out.println(grouped);

将集合中的元素分区

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> list = Arrays.asList("apple", "banana", "orange");
Map<Boolean, List<String>> partitioned = list.stream()
        .collect(Collectors.partitioningBy(s -> s.startsWith("a")));
System.out.println(partitioned);

计算集合中的元素个数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> list = Arrays.asList("apple", "banana", "orange");
long count = list.stream().count();
System.out.println(count);

获取集合中的最大值和最小值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Optional<Integer> max = list.stream().max(Integer::compare);
Optional<Integer> min = list.stream().min(Integer::compare);
System.out.println("Max: " + max.get());
System.out.println("Min: " + min.get());

将集合中的元素转换为数组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> list = Arrays.asList("apple", "banana", "orange");
String[] array = list.stream().toArray(String[]::new);
System.out.println(Arrays.toString(array));

将集合中的元素转换为Set

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> list = Arrays.asList("apple", "banana", "orange");
Set<String> set = list.stream().collect(Collectors.toSet());
System.out.println(set);

将集合中的元素转换为Map

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> list = Arrays.asList("apple", "banana", "orange");
Map<String, Integer> map = list.stream()
        .collect(Collectors.toMap(Function.identity(), String::length));
System.out.println(map);

将集合中的元素去重

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> list = Arrays.asList("apple", "banana", "orange", "apple");
List<String> distinctList = list.stream().distinct().collect(Collectors.toList());
System.out.println(distinctList);

将集合中的元素转换为大写

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> upperList = list.stream()
        .map(String::toUpperCase)
        .collect(Collectors.toList());
System.out.println(upperList);

将集合中的元素按照某个属性进行排序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Person> list = Arrays.asList(
        new Person("Tom", 25),
        new Person("Jack", 30),
        new Person("Alice", 20)
);
List<Person> sortedList = list.stream()
        .sorted(Comparator.comparing(Person::getAge))
        .collect(Collectors.toList());
System.out.println(sortedList);

将集合中的元素按照某个属性进行降序排序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Person> list = Arrays.asList(
        new Person("Tom", 25),
        new Person("Jack", 30),
        new Person("Alice", 20)
);
List<Person> sortedList = list.stream()
        .sorted(Comparator.comparing(Person::getAge).reversed())
        .collect(Collectors.toList());
System.out.println(sortedList);

将集合中的元素取平均值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
double average = list.stream().mapToInt(Integer::intValue).average().getAsDouble();
System.out.println(average);

将集合中的元素取最大值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int max = list.stream().mapToInt(Integer::intValue).max().getAsInt();
System.out.println(max);

将集合中的元素取最小值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int min = list.stream().mapToInt(Integer::intValue).min().getAsInt();
System.out.println(min);

将集合中的元素累加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int sum = list.stream().mapToInt(Integer::intValue).sum();
System.out.println(sum);

将集合中的元素按照属性分组并统计个数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Person> list = Arrays.asList(
        new Person("Tom", 25),
        new Person("Jack", 30),
        new Person("Alice", 20),
        new Person("Bob", 25)
);
Map<Integer, Long> grouped = list.stream()
        .collect(Collectors.groupingBy(Person::getAge, Collectors.counting()));
System.out.println(grouped);

将集合中的元素按照属性分组并统计属性值之和

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Person> list = Arrays.asList(
        new Person("Tom", 25),
        new Person("Jack", 30),
        new Person("Alice", 20),
        new Person("Bob", 25)
);
Map<Integer, Integer> grouped = list.stream()
.collect(Collectors.groupingBy(Person::getAge, Collectors.summingInt(Person::getAge)));
System.out.println(grouped);

将集合中的元素按照属性分组并统计属性值平均值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Person> list = Arrays.asList(
new Person("Tom", 25),
new Person("Jack", 30),
new Person("Alice", 20),
new Person("Bob", 25)
);
Map<Integer, Double> grouped = list.stream()
.collect(Collectors.groupingBy(Person::getAge, Collectors.averagingInt(Person::getAge)));
System.out.println(grouped);

将集合中的元素按照属性分组并将属性值转换为另一种类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Person> list = Arrays.asList(
        new Person("Tom", 25),
        new Person("Jack", 30),
        new Person("Alice", 20),
        new Person("Bob", 25)
);
Map<Integer, List<String>> grouped = list.stream()
        .collect(Collectors.groupingBy(Person::getAge, Collectors.mapping(Person::getName, Collectors.toList())));
System.out.println(grouped);

将集合中的元素按照属性分组并将属性值排序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Person> list = Arrays.asList(
        new Person("Tom", 25),
        new Person("Jack", 30),
        new Person("Alice", 20),
        new Person("Bob", 25)
);
Map<Integer, List<Person>> grouped = list.stream()
        .collect(Collectors.groupingBy(Person::getAge, Collectors.toList()));
grouped.forEach((age, people) -> {
    System.out.println("Age: " + age);
    List<Person> sortedPeople = people.stream()
            .sorted(Comparator.comparing(Person::getName))
            .collect(Collectors.toList());
    System.out.println(sortedPeople);
});

将集合中的元素按照属性分组并将属性值转换为Map

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Person> list = Arrays.asList(
        new Person("Tom", 25),
        new Person("Jack", 30),
        new Person("Alice", 20),
        new Person("Bob", 25)
);
Map<Integer, Map<String, Integer>> grouped = list.stream()
        .collect(Collectors.groupingBy(Person::getAge, Collectors.toMap(Person::getName, Person::getAge)));
System.out.println(grouped);

将集合中的元素按照属性分组并将属性值转换为Set

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Person> list = Arrays.asList(
        new Person("Tom", 25),
        new Person("Jack", 30),
        new Person("Alice", 20),
        new Person("Bob", 25)
);
Map<Integer, Set<String>> grouped = list.stream()
        .collect(Collectors.groupingBy(Person::getAge, Collectors.mapping(Person::getName, Collectors.toSet())));
System.out.println(grouped);

将集合中的元素按照属性分组并将属性值转换为List后拼接成字符串

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Person> list = Arrays.asList(
        new Person("Tom", 25),
        new Person("Jack", 30),
        new Person("Alice", 20),
        new Person("Bob", 25)
);
Map<Integer, String> grouped = list.stream()
        .collect(Collectors.groupingBy(Person::getAge, Collectors.mapping(Person::getName, Collectors.joining(", "))));
System.out.println(grouped);

将集合中的元素按照多个属性分组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Person> list = Arrays.asList(
        new Person("Tom", 25),
        new Person("Jack", 30),
        new Person("Alice", 20),
        new Person("Bob", 25)
);
Map<List<Object>, List<Person>> grouped = list.stream()
        .collect(Collectors.groupingBy(p -> Arrays.asList(p.getName(), p.getAge())));
System.out.println(grouped);

将集合中的元素按照多个属性分组并统计个数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Person> list = Arrays.asList(
        new Person("Tom", 25),
        new Person("Jack", 30),
        new Person("Alice", 20),
        new Person("Bob", 25),
        new Person("Tom", 25)
);
Map<List<Object>, Long> grouped = list.stream()
        .collect(Collectors.groupingBy(p -> Arrays.asList(p.getName(), p.getAge()), Collectors.counting()));
System.out.println(grouped);

将集合中的元素按照多个属性分组并统计属性值之和

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Person> list = Arrays.asList(
new Person("Tom", 25),
new Person("Jack", 30),
new Person("Alice", 20),
new Person("Bob", 25),
new Person("Tom", 25)
);
Map<List<Object>, Integer> grouped = list.stream()
.collect(Collectors.groupingBy(p -> Arrays.asList(p.getName(), p.getAge()), Collectors.summingInt(Person::getAge)));
System.out.println(grouped);

将集合中的元素按照多个属性分组并统计属性值平均值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Person> list = Arrays.asList(
        new Person("Tom", 25),
        new Person("Jack", 30),
        new Person("Alice", 20),
        new Person("Bob", 25),
        new Person("Tom", 25)
);
Map<List<Object>, Double> grouped = list.stream()
        .collect(Collectors.groupingBy(p -> Arrays.asList(p.getName(), p.getAge()), Collectors.averagingInt(Person::getAge)));
System.out.println(grouped);

将集合中的元素按照多个属性分组并将属性值转换为另一种类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Person> list = Arrays.asList(
        new Person("Tom", 25),
        new Person("Jack", 30),
        new Person("Alice", 20),
        new Person("Bob", 25),
        new Person("Tom", 25)
);
Map<List<Object>, List<String>> grouped = list.stream()
        .collect(Collectors.groupingBy(p -> Arrays.asList(p.getName(), p.getAge()), Collectors.mapping(Person::getName, Collectors.toList())));
System.out.println(grouped);

将集合中的元素按照多个属性分组并将属性值排序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Person> list = Arrays.asList(
        new Person("Tom", 25),
        new Person("Jack", 30),
        new Person("Alice", 20),
        new Person("Bob", 25),
        new Person("Tom", 25)
);
Map<List<Object>, List<Person>> grouped = list.stream()
        .collect(Collectors.groupingBy(p -> Arrays.asList(p.getName(), p.getAge()), Collectors.toList()));
grouped.forEach((keys, people) -> {
    System.out.println("Name: " + keys.get(0) + ", Age: " + keys.get(1));
    List<Person> sortedPeople = people.stream()
            .sorted(Comparator.comparing(Person::getName))
            .collect(Collectors.toList());
    System.out.println(sortedPeople);
});

将集合中的元素按照多个属性分组并将属性值转换为Map

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Person> list = Arrays.asList(
        new Person("Tom", 25),
        new Person("Jack", 30),
        new Person("Alice", 20),
        new Person("Bob", 25),
        new Person("Tom", 25)
);
Map<List<Object>, Map<String, Integer>> grouped = list.stream()
        .collect(Collectors.groupingBy(p -> Arrays.asList(p.getName(), p.getAge()), Collectors.toMap(Person::getName, Person::getAge)));
System.out.println(grouped);

将集合中的元素按照多个属性分组并将属性值转换为Set

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Person> list = Arrays.asList(
        new Person("Tom", 25),
        new Person("Jack", 30),
        new Person("Alice", 20),
        new Person("Bob", 25),
        new Person("Tom", 25)
);
Map<List<Object>, Set<String>> grouped = list.stream()
        .collect(Collectors.groupingBy(p -> Arrays.asList(p.getName(), p.getAge()), Collectors.mapping(Person::getName, Collectors.toSet())));
System.out.println(grouped);

将集合中的元素按照多个属性分组并将属性值转换为List后拼接成字符串

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Person> list = Arrays.asList(
        new Person("Tom", 25),
        new Person("Jack", 30),
        new Person("Alice", 20),
        new Person("Bob", 25),
        new Person("Tom", 25)
);
Map<List<Object>, String> grouped = list.stream()
        .collect(Collectors.groupingBy(p -> Arrays.asList(p.getName(), p.getAge()), Collectors.mapping(User::getAge, Collectors.toList())));
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Java8 Stream,常用方法大合集
一、概述 二、分类 三、具体用法 1.流的常用创建方法 2.流的中间操作 3.流的终止操作
鱼找水需要时间
2023/02/16
4500
Java8 Stream,常用方法大合集
【Java基础-1】 Java8新特性Stream详解
Java8的API中添加了一个新的特性: 流,即stream。stream是将数组或者集合的元素视为流,流在管道中流动过程中,对数据进行筛选、排序和其他操作。
云深i不知处
2020/09/16
1.2K0
Java8新特性之Stream流(含具体案例)
Stream 流是 Java 8 新提供给开发者的一组操作集合的 API,将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选、排序、聚合等。元素流在管道中经过中间操作(intermediate operation)的处理,最后由终端操作 (terminal operation) 得到前面处理的结果。Stream 流可以极大的提高开发效率,也可以使用它写出更加简洁明了的代码。我自从接触过 Stream 流之后,可以说对它爱不释手。
军军不吃鸡
2022/10/26
2.8K1
Java8新特性之Stream流(含具体案例)
深度探秘 Java 8 函数式编程(下)
函数编程的一大益处,是用更精练的代码表达常用数据处理模式。函数接口能够轻易地实现模板方法模式,只要将不确定的业务逻辑抽象成函数接口,然后传入不同的lambda表达式即可。博文“精练代码:一次Java函数式编程的重构之旅” 展示了如何使用函数式编程来重构常见代码,萃取更多可复用的代码模式。
芋道源码
2018/12/24
9880
Java 8 Lambda / Stream 基本使用再练【超详细小白向教程】
Java 8 引入了 Lambda 表达式与 Stream API,这不仅大幅减少了冗余代码,也让 Java 代码更简洁、函数式、更具表达力。对于刚接触 Java 8 的开发者来说,这两个新特性看起来有点“陌生”,但只要掌握核心语法和典型用法,就能迅速提升编码效率。
默 语
2025/04/08
2680
java8
Day1: ---- 1. Lambda表达式 Lambda表达式的基本结构: (param1,param2,param3,paramN) ->{body} 关于函数式接口: 如果一个接口只有一个抽象方法,那么该接口就是一个函数式接口。 如果我们在某个接口上声明了FunctionalInterface注解,那么编译器就会按照函数式接口的定义来要求该接口。 如果某个接口只有一个抽象方法,但我们没有给该接口声明FunctionalInterface注解,那么编译器依旧会将该接口看作是函数式接口。 ps(为什
如来
2020/07/14
8650
Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合
Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的 Lambda ,给我们操作集合(Collection)提供了极大的便利。
云深i不知处
2020/11/12
3.6K0
Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合
JDK 8 新特性之函数式编程 → Stream API
  现在的我没那激情了,只喜欢坐在角落里,默默的听着他们唱,就连旁边的妹子都劝我说:大哥别摸了,唱首歌吧
青石路
2020/09/01
5280
JDK 8 新特性之函数式编程 → Stream API
强大的 Stream 函数式编程
Java8(又称为 Jdk1.8)是 Java 语言开发的一个主要版本。Oracle 公司于 2014 年 3 月 18 日发布 Java8,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的 Stream API 等。Java8 API 添加了一个新的抽象称为流 Stream,可以让你以一种声明的方式处理数据。Stream API 可以极大提高 Java 程序员的生产力,让程序员写出高效率、干净、简洁的代码。
BUG弄潮儿
2021/07/22
2.8K0
简化你的代码,提高生产力:这10个Lambda表达式必须掌握
Lambda表达式是一种在现代编程语言中越来越常见的特性,可以简化代码、提高生产力。这篇文章将介绍10个必须掌握的Lambda表达式,这些表达式涵盖了在实际编程中经常用到的常见场景,例如列表操作、函数组合、条件筛选等。通过学习这些Lambda表达式,你将更加深入地理解函数式编程的思想,能够更加高效地编写代码。
每周聚焦
2023/04/12
2880
最常用的 Java 8 中的 Lambda 函数(项目中实用笔记)
Java 8 中的新特性,虽然现在都出到了Java14版本,不过在日常的开发过程中,8的版本是足够使用了,再说现在的8以上的版本也都面向商业收费了,很多新手,我所接触到的,像我那时候一样,追求船新版本,一上来就去学java14的东西,当成一个爱好还行,重心还是要放在实用上
拾荒者的笔记
2020/07/04
3890
Java基础篇 | Java流式编程
Java 流(Stream)是一连串的元素序列,可以进行各种操作以实现数据的转换和处理。流式编程的概念基于函数式编程的思想,旨在简化代码,提高可读性和可维护性。
程序员Leo
2023/11/16
1.4K0
Java基础篇 | Java流式编程
java 1.8 stream使用总结(个人总结有一些经典文章的集合)
☀️相关笔记章节: 🌹java 1.8 stream使用总结(个人总结有一些经典文章的集合) 🌹遍历 ArrayList和遍历 Map的几种方式 🌹Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例) 🌹List,Map多层循环嵌套Demo及其理解 🌹List,Map 三种遍历方式:(总结理解) 🌹List<Map<String, Object>>,Map<String,List<Map<String, Object>>>多方式循环遍历
默 语
2024/11/20
1960
java 1.8 stream使用总结(个人总结有一些经典文章的集合)
Java基础(二十六):Stream流及Optional类
ps:集合中数据为空,会抛异常No value present,后面会将Optional类的空值处理
Java微观世界
2025/01/20
2460
Java基础(二十六):Stream流及Optional类
Java Lambda表达式:简化编程,提高效率
Lambda表达式的使用使得集合遍历更为简洁,消除了传统for循环中的冗余代码,提升了代码的可读性和简洁性。
默 语
2024/11/20
1100
Java8 Stream API
Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错, 但使用 Stream API 无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。所以说,Java 8 中首次出现的 java.util.stream 是一个函数式语言+多核时代综合影响的产物。
游离于山间之上的Java爱好者
2022/08/09
6370
Java8 Stream API
Java8中的新特性—流式编程
首先,在学习流式编程前,首先应当知道同样为Java8中新特性的lambda表达式,相信编程基础还不错的同学在python或其他语言中也了解过,这里我只贴出一篇学习博客: https://www.cnblogs.com/haixiang/p/11029639.html 里面的内容介绍了如何通过lambda对接口的实现来书写优美的代码。
崔笑颜
2020/06/08
1.2K0
java8函数式编程Stream流处理实例讲解
一个流Stream代表了多个元素的序列,支持不同的操作:计算、求和等。Stream为函数式编程而生。对Stream的修改不会改变其数据源,特点:
青山师
2023/05/05
3220
Java 函数式编程
findAny:在 parallelStream() 中使用,寻找满足条件的任一元素 findFirst:寻找满足条件的第一个元素
玖柒的小窝
2021/12/14
5060
java8 Lambda Stream collect Collectors 常用实例
字典查询和数据转换 toMap时,如果value为null,会报空指针异常 解决办法一:
Erwin
2019/12/31
3.8K0
相关推荐
Java8 Stream,常用方法大合集
更多 >
LV.2
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档