Java基础编程500题——Stream

 💥 该系列属于【Java基础编程500题】专栏,如您需查看Java基础的其他相关题目,请您点击左边的连接

目录

1. 计算整数列表的总和

2. 找出整数列表中的最大值

3. 计算整数列表中所有偶数的平均值

4. 筛选出一个整数列表中的偶数并打印

5. 将字符串列表中的每个元素转换为大写并收集到新的列表

6. 对整数列表进行降序排序,并获取前3个元素

7. 将整数列表中的每个数字乘以2,并收集到一个新的列表中

8. 检查整数列表中是否所有数字都是正数

9. 找出整数列表中大于5的最小值

10. 检查整数列表中是否存在至少一个数字大于10

11. 检查整数列表中是否包含连续的数字

12. 将整数列表中的数字进行去重

13. 从字符串列表中找出最长的字符串

14. 从员工(姓名、年龄)列表中找出年龄大于30岁的员工姓名列表

15. 计算列表中每个元素出现的次数

16. 对字符串列表按单词长度进行分组,并打印出每个长度组的单词列表

17. 将整数列表中的数字分为奇数和偶数,分别存储在不同的列表中

18. 将一个字符串列表中的每个字符串长度求和

19. 对员工列表按年龄分组,并打印每个年龄组的人数

20. 计算字符串中每个字符出现的次数

21. 给定两个字符串列表,合并这两个列表,并去除重复项,然后按字母顺序排序

22. 将字符串列表转换为Map,其中键是字符串,值是字符串长度

23. 将字符串中的每个单词首字母转换为大写。

24. 删除字符串中所有的指定字符。

25. 去除字符串中所有重复的字符。

26. 统计字符串中每个字母出现的次数。


 ✨✨  返回题目目录 ✨ ✨ 

Java基础编程500题


1. 计算整数列表的总和

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("1", "2", "3");
        //方法一
        int IntAns = list.stream()
                .mapToInt(Integer::valueOf)            //IntStream类型
                .sum();
        
        //方法二
        Integer IntegerAns = list.stream()
                .map(Integer::parseInt)                //Stream<Integer>类型
                .reduce(0, Integer::sum);              //对Stream<Integer>和IntStream类型都可以进行规约
        System.out.println("总和为:" + IntAns);        //总和为:6
        System.out.println("总和为:" + IntegerAns);    //总和为:6
    }
}

2. 找出整数列表中的最大值

import java.util.Arrays;
import java.util.List;
import java.util.OptionalInt;

public class Main {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1, 2, 3, 4);
        // 方法一
        OptionalInt max1 = list.stream()
                .mapToInt(Integer::valueOf)
                .max();
        max1.ifPresent(System.out::println); //4

        // 方法二
        int max2 = list.stream()
                .reduce(Integer.MIN_VALUE, (a, b) -> a >= b ? a : b);
        //  .reduce(Integer.MIN_VALUE, Integer::max); //初始值是第一个元素或最小值
        System.out.println(max2); //4

    }
}

3. 计算整数列表中所有偶数的平均值

import java.util.Arrays;
import java.util.List;
import java.util.OptionalDouble;

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

        //OptionalDouble是一个可能包含double数值容器,数值也有可能不存在
        OptionalDouble average = list.stream()
                .filter(n -> n % 2 == 0)
                .mapToInt(Integer::valueOf)//转换成IntStream类型
                .average();

        //ifPresent():这是OptionalDouble类中的一个方法,用于检查这个Optional对象中是否包含值。如果Optional对象包含值,那么ifPresent()方法会执行传递给它的lambda表达式。
        average.ifPresent(value -> System.out.println(value)); //3.0

    }
}

4. 筛选出一个整数列表中的偶数并打印

import java.util.Arrays;
import java.util.List;
​
public class Main {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("1", "2", "5", "3", "6");
        list.stream()
                .mapToInt(Integer::valueOf)//转换成int类型,也可以parseInt
                .filter(x -> x % 2 == 0)
                .forEach(System.out::println); 
    }
}

5. 将字符串列表中的每个元素转换为大写并收集到新的列表

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

public class Main {
    public static void main(String[] args) {
        // 初始化列表
        List<String> list = Arrays.asList("aaa", "bbb", "cc", "D");

        // 将列表中的字符串转换为大写,并收集结果到新的列表中
        List<String> collect = list.stream()
                .map(String::toUpperCase) // 映射操作,将每个字符串转换为大写
                .collect(Collectors.toList()); // 收集操作,将结果收集到列表中

        // 打印转换后的列表
        System.out.println(collect); //[AAA, BBB, CC, D]
    }
}

6. 对整数列表进行降序排序,并获取前3个元素

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

public class Main {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1, 2, 4, 3, 6, 3, 8, 5);
        List<Integer> collect = list.stream()
                .sorted((a, b) -> b - a)
                .limit(3)
                .collect(Collectors.toList());
        System.out.println(collect);//[8, 6, 5]

    }
}

7. 将整数列表中的每个数字乘以2,并收集到一个新的列表中

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

public class Main {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1, 2, 3, 4);
        List<Integer> collect = list.stream()
                .map(s -> s * 2)
                .collect(Collectors.toList());
        collect.forEach(s -> System.out.print(s + " ")); //2 4 6 8 
    }
}

8. 检查整数列表中是否所有数字都是正数

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1, 2, 4, 3, 6, 3, 8, 5);
        boolean b = list.stream()
                .allMatch(Main::IsPositive); //对list里面的所有数进行判断
                //.allMatch(n -> n > 0); //也可以直接该写法

        System.out.println(b); //true
    }

    public static boolean IsPositive(int n) {
        return n > 0;
    }
}

9. 找出整数列表中大于5的最小值

import java.util.Arrays;
import java.util.List;
import java.util.OptionalInt;

public class Main {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1, 2, 4, 3, 6, 3, 8, 5);
        OptionalInt min = list.stream()
                .mapToInt(Integer::valueOf)
                .filter(n -> n > 5)
                .findFirst();
        min.ifPresent(System.out::println); //6
    }
}

10. 检查整数列表中是否存在至少一个数字大于10

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1, 2, 4, 3, 6, 3, 8, 5);
        boolean b = list.stream().anyMatch(n -> n > 5);//判断列表中是否有一个存在>5的数字
        System.out.println(b);

    }
}

11. 检查整数列表中是否包含连续的数字

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1, 2, 3, 5, 6, 7);
        boolean hasConsecutiveNumbers = list.stream()
                .anyMatch(n -> list.contains(n + 1));
        System.out.println("列表中是否包含连续的数字:" + hasConsecutiveNumbers);//列表中是否包含连续的数字:true
    }
}

12. 将整数列表中的数字进行去重

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

public class Main {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(3, 1, 4, 1, 5, 9);
        List<Integer> collect = list.stream()
                .distinct()
                .collect(Collectors.toList());
        System.out.println(collect);//[3, 1, 4, 5, 9]
    }
}

13. 从字符串列表中找出最长的字符串

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

public class Main {
    public static void main(String[] args) {
        List<String> strings = Arrays.asList("hello", "world2222", "stream22", "api", "java");
        // 方法一
        Optional<String> longestString = strings.stream().max((s1, s2) -> s1.length() - s2.length());
        longestString.ifPresent(System.out::println); //world2222

        // 方法二
        Optional<String> reduce = strings.stream().reduce((a, b) -> a.length() > b.length() ? a : b);
        System.out.println(reduce.orElse(null));//world2222
    }
}

14. 从员工(姓名、年龄)列表中找出年龄大于30岁的员工姓名列表

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

class Employee {
    private String name;
    private int age;

    public Employee(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }


}

public class Main {
    public static void main(String[] args) {
        List<Employee> employees = Arrays.asList(
                new Employee("Alice", 32),
                new Employee("Bob", 29),
                new Employee("Charlie", 34)
        );

        String collect = employees.stream()
                .filter(e -> e.getAge() > 30)
                .map(e -> e.getName())//对每个员工取出姓名,或直接Employee::getName
                .collect(Collectors.joining(", ")); 
        System.out.println(collect); //Alice, Charlie
    }
}

15. 计算列表中每个元素出现的次数

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

public class Main {
    public static void main(String[] args) {
        List<Integer> integerNumbers = Arrays.asList(1, 2, 4, 3, 6, 3, 8, 5);
        Map<Integer, Long> collect = integerNumbers
                .stream()
                .collect(Collectors.groupingBy(e -> e, Collectors.counting()));
        //groupingBy类似与SQL中的GROUP BY
        //<e, Collectors.counting())>中,e值key,而Collectors.counting()是对每个key聚合后的值
        System.out.println(collect); // {1=1, 2=1, 3=2, 4=1, 5=1, 6=1, 8=1}
    }
}

16. 对字符串列表按单词长度进行分组,并打印出每个长度组的单词列表

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

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

        Map<Integer, List<String>> wordsByLength = words.stream()
                .collect(Collectors.groupingBy(String::length)); 
        //groupingBy只有一个参数时,key就是String::length,而value就是元素本身
        
        //wordsByLength: {3=[fig], 4=[date], 5=[apple, grape], 6=[banana, cherry]}
        wordsByLength.forEach((length, wordList) -> System.out.println("Length: " + length + ", Words: " + wordList));
        
   
    }
}

17. 将整数列表中的数字分为奇数和偶数,分别存储在不同的列表中

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

public class Main {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1, 2, 4, 3, 6, 3, 8, 5);
        Map<Boolean, List<Integer>> partitionedMap = list.stream()
                .collect(Collectors.partitioningBy(n -> n % 2 == 0));
        //partitioningBy是二元分组,groupingBy是多元分组
        System.out.println("偶数列表:" + partitionedMap.get(true)); //偶数列表:[2, 4, 6, 8]
        System.out.println("奇数列表:" + partitionedMap.get(false)); //奇数列表:[1, 3, 3, 5]
    }
}

18. 将一个字符串列表中的每个字符串长度求和

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

public class Main {
    public static void main(String[] args) {
        List<String> strings = Arrays.asList("apple", "banana", "cherry");
        // 方法一
        int totalLength1 = strings.stream()
                .collect(Collectors.summingInt(String::length));
        System.out.println(totalLength1); // 输出:17
        
        // 方法二
        int totalLength2 = strings.stream()
                .mapToInt(String::length).sum();
        System.out.println(totalLength2); // 输出:17

        // 方法三
        int totalLength3 = strings.stream()
                .reduce("",String::concat)
                .length();
        System.out.println(totalLength3); // 输出:17
    }
}

19. 对员工列表按年龄分组,并打印每个年龄组的人数

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

class Employee {
    String name;
    int age;

    Employee(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return name + ": " + age;
    }
}

public class Main {
    public static void main(String[] args) {
        List<Employee> people = Arrays.asList(
                new Employee("Alice", 22),
                new Employee("Bob", 20),
                new Employee("Charlie", 21),
                new Employee("David", 20)
        );

        //按照age进行分组,对每个分组求和
        Map<Integer, Long> peopleByAge = people.stream()
                .collect(Collectors.groupingBy(Employee::getAge, Collectors.counting()));
        peopleByAge.forEach((age, count) -> System.out.println("Age: " + age + ", Count: " + count));


        //按照age进行分组
        Map<Integer, List<Employee>> collect = people.stream()
                .collect(Collectors.groupingBy(person -> person.getAge()));
        System.out.println(collect);
        
    }
}

20. 计算字符串中每个字符出现的次数

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

public class Main {
    public static void main(String[] args) {
        String str = "hello world";
        
        Map<Character, Long> charCountMap = str.chars() // IntStream
                .mapToObj(c -> (char) c) // Stream<Character>
                .collect(Collectors.groupingBy(c -> c, Collectors.counting()));

        System.out.println(charCountMap); //{ =1, r=1, d=1, e=1, w=1, h=1, l=3, o=2}
    }
}

21. 给定两个字符串列表,合并这两个列表,并去除重复项,然后按字母顺序排序

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

public class Main {
    public static void main(String[] args) {
        List<String> list1 = Arrays.asList("a", "b", "c");
        List<String> list2 = Arrays.asList("b", "c", "d");

        List<String> mergedList = Stream.concat(list1.stream(), list2.stream())
                .distinct()
                .sorted()
                .collect(Collectors.toList());
        System.out.println(mergedList);//[a, b, c, d]
    }
}

22. 将字符串列表转换为Map,其中键是字符串,值是字符串长度

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

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

        Map<String, Integer> stringLengthMap = strings.stream()
                .collect(Collectors.toMap(s -> s, String::length));

        stringLengthMap.forEach((s, length) -> System.out.println(s + ": " + length));
//        banana: 6
//        apple: 5
//        cherry: 6
    }
}

23. 将字符串中的每个单词首字母转换为大写。

import java.util.Arrays;
import java.util.stream.Collectors;
 
public class Main {
    public static void main(String[] args) {
        String str = "this is a test";
 
        // 方法一
        String collect = Arrays.stream(str.split(" "))
                .map(s -> Character.toUpperCase(s.charAt(0)) + s.substring(1))
                .collect(Collectors.joining(" "));
        System.out.println(collect); //This Is A Test
 
        // 方法二
        String[] strArr = str.split(" ");
        StringBuilder sb = new StringBuilder();
        for (var i : strArr) {
            sb.append(Character.toUpperCase(i.charAt(0)))
                    .append(i.substring(1))
                    .append(" ");
        }
        System.out.println(sb.toString()); //This Is A Test
    }
}

24. 删除字符串中所有的指定字符。

import java.util.List;
import java.util.stream.Collectors;
 
public class Main {
    public static void main(String[] args) {
        String str = "this is a test";
        char delChar = 's';
 
        // 方法一
        char[] charArray = str.toCharArray();
        StringBuilder sb = new StringBuilder();
        for(char c : charArray){
            if(c!=delChar){
                sb.append(c);
            }
        }
        System.out.println(sb.toString()); // thi i a tet
 
        // 方法二
        String collect = str.chars()
                .mapToObj(c -> (char) c)
                .filter(c -> c != delChar)
                .map(String::valueOf)
                .collect(Collectors.joining(""));
        System.out.println(collect);      // thi i a tet
        
    }
}

25. 去除字符串中所有重复的字符。

import java.util.stream.Collectors;
 
public class Main {
    public static void main(String[] args) {
        String str = "this is a test";
        String collect = str.chars()
                .distinct()
                .mapToObj(a -> String.valueOf((char) a))
                .collect(Collectors.joining(""));
        System.out.println(collect); //this ae
    }
}

26. 统计字符串中每个字母出现的次数。

import java.util.Map;
import java.util.stream.Collectors;
 
public class Main {
    public static void main(String[] args) {
        String test = "abbacccc";
        Map<String, Long> collect = test.chars()
                .mapToObj(s -> String.valueOf((char) s))
                .collect(Collectors.groupingBy(s -> s, Collectors.counting()));
        System.out.println(collect);
        
    }
}

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值