Java Stream流面试题

1.请使用 Java Stream 实现将 List 转换为 Map,key 是字符串的长度,value 是该长度的字符串列表

List<String> list= Arrays.asList("aa","bbb","uuuuuuuu","cccd","dddef","oo");
        //按照字符串的长度进行分组,key是长度,value是相同字符串长度的list集合
        Map<Integer, List<String>> map = list.stream().collect(Collectors.groupingBy(x -> x.length()));
        System.out.println(map);

2.请使用 Java Stream 实现过滤出 List 中所有大于等于 10 的元素

package com.example.demo1.controller;

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

public class Test2 {

    public static void main(String[] args) {
        //请使用 Java Stream 实现过滤出 List 中所有大于等于 10 的元素
        List<Integer> list= Arrays.asList(1,3,5,10,11,45,25);
        //所有大于等于10的 全部放入另一个集合中
        List<Integer>res=list.stream()
                .filter(x->x>=10)
                .collect(Collectors.toList());
        System.out.println(res);
    }
}

3.请使用 Java Stream 合并两个 List,去重,然后升序排列

package com.example.demo1.controller;

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

public class Test3 {
    public static void main(String[] args) {
        //请使用 Java Stream 合并两个 List,去重,然后升序排列
        List<Integer> a= Arrays.asList(1,5,2);
        List<Integer> b= Arrays.asList(2,6,3,10,5);
        List<Integer> concat = Stream.
                //合并2个流
                concat(a.stream(), b.stream())
                //去重
                .distinct()
                //升序
                .sorted()
                //返回List
                .collect(Collectors.toList());
        System.out.println(concat);

    }
}

4.请使用 Java Stream 将 Map 中所有 value 转换为列表

package com.example.demo1.controller;

import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Test4 {
    public static void main(String[] args) {
        //请使用 Java Stream 将 Map 中所有 value 转换为列表
        Map<Integer,Integer> map=new HashMap<>();
        map.put(1,10);
        map.put(2,20);
        map.put(3,30);

        List<Integer> values = map.values()
                .stream().collect(Collectors.toList());
        System.out.println(values);
    }
}

 

5.请使用 Java Stream 实现对 List 中每个元素进行平方操作

package com.example.demo1.controller;

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

public class Test5 {

    public static void main(String[] args) {
        //请使用 Java Stream 实现对 List 中每个元素进行平方操作
        List<Integer> list= Arrays.asList(1,2,3,4,5);
        List<Integer>res=list.stream().map(x->x*x).collect(Collectors.toList());
        System.out.println(res);
    }
}

6.使用Stream流来完成以下操作

1.生成id为key ,名称为value的map
2. 获取所有评分大于4.5,菜品包含A,B两类的所有商户的评价数之和

package com.example.demo1.controller;

import java.util.List;

public class ShangHu {

    public ShangHu(String id, String name, Integer pingFen, List<String> caiPin, Integer pingJiaShu) {
        this.id = id;
        this.name = name;
        this.pingFen = pingFen;
        this.caiPin = caiPin;
        this.pingJiaShu = pingJiaShu;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getPingFen() {
        return pingFen;
    }

    public void setPingFen(Integer pingFen) {
        this.pingFen = pingFen;
    }

    public List<String> getCaiPin() {
        return caiPin;
    }

    public void setCaiPin(List<String> caiPin) {
        this.caiPin = caiPin;
    }

    public Integer getPingJiaShu() {
        return pingJiaShu;
    }

    public void setPingJiaShu(Integer pingJiaShu) {
        this.pingJiaShu = pingJiaShu;
    }

    private String id;

    //商户
    private String name;

    //评分
    private Integer pingFen;

    //菜品
    private List<String> caiPin;

    //评价数
    private Integer pingJiaShu;

    @Override
    public String toString() {
        return "ShangHu{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", pingFen=" + pingFen +
                ", caiPin=" + caiPin +
                ", pingJiaShu=" + pingJiaShu +
                '}';
    }
}
package com.example.demo1.controller;

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

public class Test6 {
    public static void main(String[] args) {
        //使用Stream流来完成以下操作
        //1.生成id为key ,名称为value的map
        //2. 获取所有评分大于4.5,菜品包含A,B两类的所有商户的评价数之和
        List<ShangHu> list=new ArrayList<>();
        list.add(new ShangHu("1","商户A",5, Arrays.asList("A1","B1"),10));
        list.add(new ShangHu("2","商户B",6, Arrays.asList("A2","B3"),20));
        list.add(new ShangHu("3","商户C",10, Arrays.asList("A4","B5"),1));
        list.add(new ShangHu("4","商户D",3, Arrays.asList("C6","C7"),5));
        list.add(new ShangHu("5","商户E",7, Arrays.asList("D1","E1"),6));

        //第一步解答 转换map tomap需要2个参数 一个是key,一个是value
        Map<String, String> map = list.stream().collect(Collectors
                .toMap(ShangHu::getId, ShangHu::getName));
        System.out.println(map);
        System.out.println("================================");

        //第二步解答
        int sum = list.stream()
                //过滤 评分大于4.5的 只要大于的都查询出来
                .filter(x -> x.getPingFen() > 4.5)
                //过滤菜品 包含A B 开头的 都查询出来
                //先过滤A
                .filter(x -> x.getCaiPin().stream().anyMatch(y -> y.startsWith("A")))
                //然后再过滤B
                .filter(x->x.getCaiPin().stream().anyMatch(y->y.startsWith("B")))
                //对评价数 单独分出来
                .mapToInt(x->x.getPingJiaShu())
                //累加求和
                .sum();
        System.out.println(sum);
    }
}

7.计算List<Integer>中所有偶数的平均值

import java.util.*;
import java.util.stream.Collectors;

public class Test6 {
    public static void main(String[] args) {
        //7.计算List<Integer>中所有偶数的平均值
        List<Integer>list=Arrays.asList(1,2,3,4,5,6);
        double average = list.stream()
                .filter(x -> x % 2 == 0)
                .mapToInt(x -> x).average().orElse(0.0);
        System.out.println(average);
    }
}

 

 

8. 将List<String>中的字符串连接成一个单独的字符串,并用逗号分隔

package com.example.demo1.controller;

import java.util.*;
import java.util.stream.Collectors;

public class Test6 {
    public static void main(String[] args) {
        //8. 将List<String>中的字符串连接成一个单独的字符串,并用逗号分隔
        List<String>list=Arrays.asList("a","b","c","d","e");
        String collect = list.stream()
                //把字符串拼接到一起 每个字符之间有个逗号
                .collect(Collectors.joining(","));
        System.out.println(collect);

    }
}

 

9. 将List<Employee>中的年龄进行排序,并输出排序后的员工列表

package com.example.demo1.controller;

public class Employee{

    private Integer id;

    public Employee(Integer id, Integer age) {
        this.id = id;
        this.age = age;
    }

    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", age=" + age +
                '}';
    }
}

package com.example.demo1.controller;

import java.util.*;
import java.util.stream.Collectors;


public class Test6 {
    public static void main(String[] args) {
        //9. 将List<Employee>中的年龄进行排序,并输出排序后的员工列表
        List<Employee>list=new ArrayList<>();
        list.add(new Employee(1,10));
        list.add(new Employee(2,1));
        list.add(new Employee(3,30));

        List<Employee> collect = list.stream()
                //按照年龄排序
                .sorted(Comparator.comparingInt(x->x.getAge()))
                .collect(Collectors.toList());
        System.out.println(collect);

    }
}

 

10.将List<Integer>中的元素拼接成一个由逗号分隔的字符串,并去重

 

package com.example.demo1.controller;

import java.util.*;
import java.util.stream.Collectors;


public class Test6 {
    public static void main(String[] args) {
        //10.将List<Integer>中的元素拼接成一个由逗号分隔的字符串,并去重
        List<Integer>list=Arrays.asList(1,2,3,3,4,5);
        String collect = list.stream()
                //去重复
                .distinct()
                //转换成字符串
                .map(Objects::toString)
                //逗号拼接
                .collect(Collectors.joining(","));
        System.out.println(collect);
    }
}

 

11.计算List<Double>中的最大值、最小值、总和以及平均值

package com.example.demo1.controller;

import java.util.*;
import java.util.stream.Collectors;


public class Test6 {
    public static void main(String[] args) {
        //11.计算List<Double>中的最大值、最小值、总和以及平均值
        List<Double>list=Arrays.asList(1.0,2.0,3.0,4.0,5.0,6.0);
        double min=list.stream().mapToDouble(x->x).min().getAsDouble();
        double max=list.stream().mapToDouble(x->x).max().getAsDouble();
        double sum=list.stream().mapToDouble(x->x).sum();
        double avg=list.stream().mapToDouble(x->x).average().getAsDouble();
        System.out.println(min);
        System.out.println(max);
        System.out.println(sum);
        System.out.println(avg);
    }
}

 

 

 

 

 

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当面试中被问到有关stream的问题时,以下是一些可能的问题和答案: 1. 什么是stream)? 是一种用于在程序中读取和写入数据的抽象概念。它可以用于从输入源(如文件、网络连接等)读取数据,或者将数据写入输出目标(如文件、网络连接等)。 2. Java中的stream)分为哪几种类型? Java中的主要分为两种类型:字节(byte stream)和字符(character stream)。字节用于读取和写入二进制数据,而字符用于读取和写入字符数据。 3. 什么是字节(byte stream)? 字节是用于读取和写入二进制数据的。它以字节为单位进行操作,适用于处理图片、音频、视频等二进制文件。 4. 什么是字符(character stream)? 字符是用于读取和写入字符数据的。它以字符为单位进行操作,适用于处理文本文件。 5. Java中常见的字节类有哪些? Java中常见的字节类有:InputStream和OutputStream。它们是抽象类,具体的实现类包括FileInputStream、FileOutputStream、ByteArrayInputStream等。 6. Java中常见的字符类有哪些? Java中常见的字符类有:Reader和Writer。它们是抽象类,具体的实现类包括FileReader、FileWriter、BufferedReader等。 7. 怎样使用来读取文件内容? 可以使用字节或字符来读取文件内容。对于字节,可以使用FileInputStream来读取文件的字节数据;对于字符,可以使用FileReader来读取文件的字符数据。读取文件内容的过程是将文件数据读取到一个缓冲区中,然后从缓冲区中逐步读取数据。 8. 怎样使用来写入文件内容? 可以使用字节或字符来写入文件内容。对于字节,可以使用FileOutputStream来写入字节数据到文件;对于字符,可以使用FileWriter来写入字符数据到文件。写入文件内容的过程是将数据写入到一个缓冲区中,然后将缓冲区中的数据写入到文件中。 这些问题和答案可以帮助你更好地理解和回答与相关的面试问题。当然,具体的问题可能会因面试官的要求而有所不同,所以建议在面试前仔细准备并了解相关知识。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值