Java 8 中 20 个高频面试题及答案

news2024/9/21 0:28:37

在这里插入图片描述
在这里插入图片描述

文章目录

    • 前言
    • 20 道高频题
      • 问题 1:给定一个整数列表,使用 Stream 函数找出列表中所有的偶数?
      • 问题 2:给定一个整数列表,使用 Stream 函数找出所有以 1 开头的数字?
      • 问题 3:如何使用 Stream 函数在给定的整数列表中找到重复元素?
      • 问题4:给定一个整数列表,使用 Stream 函数找出列表中的第一个元素?
      • 问题5:给定一个整数列表,使用 Stream 函数计算列表中元素的总数?
      • 问题 6:给定一个整数列表,使用 Stream 函数找出其中的最大值?
      • 问题 7:给定一个字符串,使用 Stream 函数找出其中第一个不重复的字符?
      • 问题 8:给定一个字符串,使用 Stream 函数找出其中第一个重复的字符?
      • 问题 9:给定一个整数列表,使用 Stream 函数对列表中的值进行排序?
      • 问题 10:给定一个整数列表,使用 Stream 函数按降序排序列表中的值?
      • 问题 11:给定一个整数数组 nums,如果数组中任何值至少出现两次则返回 true,如果每个元素都不同则返回 false?
      • 问题 12:如何使用 Java 8 Date 和 Time API 获取当前日期和时间?
      • 问题 13:如何使用 Stream 函数将一个字符串列表连接成一个单独的字符串?
      • 问题 14:给定一个字符串数组,使用 Stream 函数找出其中最长的字符串?
      • 问题 15:如何使用 Stream 函数将一个数字列表转换为它们的平方数列表?
      • 问题 16:如何使用 Stream 函数计算整数列表的平均值?
      • 问题 17:如何使用 Stream 函数找出字符串列表中所有不为空且长度大于 3 的字符串?
      • 问题 18:如何使用 Stream 函数找出字符串列表中最长的字符串的长度?
      • 问题 19:如何使用 Stream 函数对字符串列表进行排序并转换为大写?
      • 问题 20:如何使用 Stream 函数将一个整数列表中的所有元素翻倍?
    • 结语

前言

自 Java 8 发布以来已经过去了 8 年,Java 8 引入了许多新特性,‌包括改进的日期和时间 API、‌Lambda 表达式、‌方法引用、‌默认方法、‌以及 Nashorn JavaScript 引擎等。‌这些新特性不仅增强了 Java 的开发效率和功能性,‌也为面试中的 Java 8 相关问题提供了丰富的素材。‌

在本教程中,我将分享 20 个顶级的 Java 8 编码和编程面试题及答案。我只使用了 Stream API 函数来解决以下问题。

这些问题的答案涵盖了 Java 8 中的一些核心特性和改进,‌对于理解 Java 8 的新特性和如何使用它们非常有帮助

20 道高频题

问题 1:给定一个整数列表,使用 Stream 函数找出列表中所有的偶数?

Java 8 中的 Stream API 提供了一种简洁且高效的方法来处理集合数据。以下是解决这个问题的代码示例:

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

public class EvenNumber {
    public static void main(String args[]) {
        List<Integer> list = Arrays.asList(10, 15, 8, 49, 25, 98, 32);
        list.stream()
            .filter(n -> n % 2 == 0)
            .forEach(System.out::println);
    }
}

输出:

10, 8, 98, 32

问题 2:给定一个整数列表,使用 Stream 函数找出所有以 1 开头的数字?

通过 Stream API,可以很容易地找到以特定数字开头的元素。以下是代码示例:

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

public class NumberStartingWithOne {
    public static void main(String args[]) {
        List<Integer> myList = Arrays.asList(10, 15, 8, 49, 25, 98, 32);
        myList.stream()
              .map(s -> s + "") // 将整数转换为字符串
              .filter(s -> s.startsWith("1"))
              .forEach(System.out::println);
    }
}

输出:

10, 15

问题 3:如何使用 Stream 函数在给定的整数列表中找到重复元素?

利用 Stream API,我们可以轻松找到列表中的重复元素。以下是两种方法:

方法1:

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

public class DuplicateElements {
    public static void main(String args[]) {
        List<Integer> myList = Arrays.asList(10, 15, 8, 49, 25, 98, 98, 32, 15);
        Set<Integer> set = new HashSet<>();
        myList.stream()
              .filter(n -> !set.add(n))
              .forEach(System.out::println);
    }
}

输出:

98, 15

方法2:使用 distinct() 关键字

public static void getDataWithoutDuplicates() {
    List<Integer> myList = Arrays.asList(1, 1, 85, 6, 2, 3, 65, 6, 45, 45, 5662, 2582, 2, 2, 266, 666, 656);
    myList.stream().distinct().forEach(noDuplicateData -> System.out.println(noDuplicateData));
}

输出:

1, 85, 6, 2, 3, 65, 45, 5662, 2582, 266, 666, 656

问题4:给定一个整数列表,使用 Stream 函数找出列表中的第一个元素?

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

public class FindFirstElement {
    public static void main(String args[]) {
        List<Integer> myList = Arrays.asList(10, 15, 8, 49, 25, 98, 98, 32, 15);
        myList.stream()
              .findFirst()
              .ifPresent(System.out::println);
    }
}

输出:

10

问题5:给定一个整数列表,使用 Stream 函数计算列表中元素的总数?

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

public class FindTheTotalNumberOfElements {
    public static void main(String args[]) {
        List<Integer> myList = Arrays.asList(10, 15, 8, 49, 25, 98, 98, 32, 15);
        long count = myList.stream().count();
        System.out.println(count);
    }
}

输出:

9

问题 6:给定一个整数列表,使用 Stream 函数找出其中的最大值?

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

public class FindMaxElement {
    public static void main(String args[]) {
        List<Integer> myList = Arrays.asList(10, 15, 8, 49, 25, 98, 98, 32, 15);
        int max = myList.stream().max(Integer::compare).get();
        System.out.println(max);
    }
}

输出:

98

问题 7:给定一个字符串,使用 Stream 函数找出其中第一个不重复的字符?

import java.util.*;
import java.util.stream.*;
import java.util.function.Function;

public class FirstNonRepeated {
    public static void main(String args[]) {
        String input = "Java articles are Awesome";
        Character result = input.chars() // 字符串流
                                .mapToObj(s -> Character.toLowerCase(Character.valueOf((char) s))) // 首先转换为Character对象,然后转换为小写
                                .collect(Collectors.groupingBy(Function.identity(), LinkedHashMap::new, Collectors.counting())) // 存储字符及其计数
                                .entrySet()
                                .stream()
                                .filter(entry -> entry.getValue() == 1L)
                                .map(entry -> entry.getKey())
                                .findFirst()
                                .get();
        System.out.println(result);
    }
}

输出:

j

问题 8:给定一个字符串,使用 Stream 函数找出其中第一个重复的字符?

import java.util.*;
import java.util.stream.*;
import java.util.function.Function;

public class FirstRepeated {
    public static void main(String args[]) {
        String input = "Java Articles are Awesome";
        Character result = input.chars() // 字符串流
                                .mapToObj(s -> Character.toLowerCase(Character.valueOf((char) s))) // 首先转换为Character对象,然后转换为小写
                                .collect(Collectors.groupingBy(Function.identity(), LinkedHashMap::new, Collectors.counting())) // 存储字符及其计数
                                .entrySet()
                                .stream()
                                .filter(entry -> entry.getValue() > 1L)
                                .map(entry -> entry.getKey())
                                .findFirst()
                                .get();
        System.out.println(result);
    }
}

输出:

a

问题 9:给定一个整数列表,使用 Stream 函数对列表中的值进行排序?

import java.util.*;
import java.util.stream.*;
import java.util.function.Function;

public class SortValues {
    public static void main(String args[]) {
        List<Integer> myList = Arrays.asList(10, 15, 8, 49, 25, 98, 98, 32, 15);
        myList.stream().sorted().forEach(System.out::println);
    }
}

输出:

8
10
15
15
25
32
49
98
98

问题 10:给定一个整数列表,使用 Stream 函数按降序排序列表中的值?

import java.util.*;
import java.util.stream.*;
import java.util.function.Function;

public class SortDescending {
    public static void main(String args[]) {
        List<Integer> myList = Arrays.asList(10, 15, 8, 49, 25, 98, 98, 32, 15);
        myList.stream().sorted(Collections.reverseOrder()).forEach(System.out::println);
    }
}

输出:

98
98
49
32
25
15
15
10
8

问题 11:给定一个整数数组 nums,如果数组中任何值至少出现两次则返回 true,如果每个元素都不同则返回 false?

public boolean containsDuplicate(int[] nums) {
    List<Integer> list = Arrays.stream(nums).boxed().collect(Collectors.toList());
    Set<Integer> set = new HashSet<>(list);
    return set.size() != list.size();
}

输入:

nums = [1,2,3,1]

输出:

true

输入:

nums = [1,2,3,4]

输出:

false

问题 12:如何使用 Java 8 Date 和 Time API 获取当前日期和时间?

class Java8 {
    public static void main(String[] args) {
        System.out.println("Current Local Date: " + java.time.LocalDate.now());
        // 使用LocalDate API获取日期
        System.out.println("Current Local Time: " + java.time.LocalTime.now());
        // 使用LocalTime API获取时间
        System.out.println("Current Local Date and Time: " + java.time.LocalDateTime.now());
        //
        ```java
        // 使用LocalDateTime API获取日期和时间
        System.out.println("Current Instant: " + java.time.Instant.now());
        // 使用Instant获取时间戳
    }
}

输出:

Current Local Date: 2024-07-22
Current Local Time: 12:34:56.789
Current Local Date and Time: 2024-07-22T12:34:56.789
Current Instant: 2024-07-22T04:34:56.789Z

问题 13:如何使用 Stream 函数将一个字符串列表连接成一个单独的字符串?

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

public class JoinStrings {
    public static void main(String args[]) {
        List<String> list = Arrays.asList("Java", "is", "fun");
        String result = list.stream()
                            .collect(Collectors.joining(" "));
        System.out.println(result);
    }
}

输出:

Java is fun

问题 14:给定一个字符串数组,使用 Stream 函数找出其中最长的字符串?

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

public class LongestString {
    public static void main(String args[]) {
        String[] words = {"Java", "Stream", "API", "Programming", "Language"};
        String longest = Arrays.stream(words)
                               .max(Comparator.comparingInt(String::length))
                               .orElse(null);
        System.out.println(longest);
    }
}

输出:

Programming

问题 15:如何使用 Stream 函数将一个数字列表转换为它们的平方数列表?

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

public class SquareNumbers {
    public static void main(String args[]) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        List<Integer> squares = numbers.stream()
                                       .map(n -> n * n)
                                       .collect(Collectors.toList());
        System.out.println(squares);
    }
}

输出:

[1, 4, 9, 16, 25]

问题 16:如何使用 Stream 函数计算整数列表的平均值?

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

public class AverageValue {
    public static void main(String args[]) {
        List<Integer> numbers = Arrays.asList(10, 20, 30, 40, 50);
        double average = numbers.stream()
                                .mapToInt(Integer::intValue)
                                .average()
                                .orElse(0.0);
        System.out.println(average);
    }
}

输出:

30.0

问题 17:如何使用 Stream 函数找出字符串列表中所有不为空且长度大于 3 的字符串?

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

public class FilterStrings {
    public static void main(String args[]) {
        List<String> strings = Arrays.asList("Java", "", "Stream", "API", "Programming", "");
        List<String> filtered = strings.stream()
                                       .filter(s -> !s.isEmpty() && s.length() > 3)
                                       .collect(Collectors.toList());
        System.out.println(filtered);
    }
}

输出:

[Java, Stream, Programming]

问题 18:如何使用 Stream 函数找出字符串列表中最长的字符串的长度?

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

public class LongestStringLength {
    public static void main(String args[]) {
        List<String> strings = Arrays.asList("Java", "Stream", "API", "Programming", "Language");
        int maxLength = strings.stream()
                               .mapToInt(String::length)
                               .max()
                               .orElse(0);
        System.out.println(maxLength);
    }
}

输出:

11

问题 19:如何使用 Stream 函数对字符串列表进行排序并转换为大写?

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

public class SortAndUppercase {
    public static void main(String args[]) {
        List<String> strings = Arrays.asList("java", "stream", "api", "programming", "language");
        List<String> sortedAndUppercase = strings.stream()
                                                 .sorted()
                                                 .map(String::toUpperCase)
                                                 .collect(Collectors.toList());
        System.out.println(sortedAndUppercase);
    }
}

输出:

[API, JAVA, LANGUAGE, PROGRAMMING, STREAM]

问题 20:如何使用 Stream 函数将一个整数列表中的所有元素翻倍?

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

public class DoubleValues {
    public static void main(String args[]) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        List<Integer> doubled = numbers.stream()
                                       .map(n -> n * 2)
                                       .collect(Collectors.toList());
        System.out.println(doubled);
    }
}

输出:

[2, 4, 6, 8, 10]

结语

以上问题和解决方案展示了如何利用 Java 8 中的 Stream API 进行高效的数据处理。这些示例不仅帮助你准备面试问题,还可以作为实际开发中的参考。

通过这些示例,你可以看到 Stream API 在处理集合数据时的强大功能和简洁语法。这些技能对于现代 Java 开发者来说至关重要,特别是在处理大数据集和实现复杂的数据操作时。

希望这些内容对你有所帮助,并祝你在Java编程的道路上取得更大的成就!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1951365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1.ESP32-CAM 下使用 ESP-IDF 打开摄像头

主要资料&#xff1a; 乐鑫官方编程指南 ESP-IDF 编程指南安信可官方模块页 安信可-ESP32-CAM摄像头开发板官方使用教程 安信可ESP32-CAM摄像头开发demo–局域网拍照、实时视频、人脸识别 &#xff08;开发环境是Linux&#xff09; 本文目标是在 Windows 下跑通摄像头 hello …

国衍科技——RFID技术的应用

在文物馆藏信息的记录与管理过程中&#xff0c;准确性和详细性是至关重要的。无论是大型博物馆还是私人收藏馆&#xff0c;都需要有效的方法来确保馆藏文物信息的可追溯性和可访问性&#xff0c;才能提供更好的服务和保护馆藏资源。而结合射频识别&#xff08;RFID&#xff09;…

2-46 基于matlab的声音信号的短时能量、短时过零率、端点检测

基于matlab的声音信号的短时能量、短时过零率、端点检测。通过计算计算短时能量、调整能量门限&#xff0c;然后开始端点检测。输出可视化结果。程序已调通&#xff0c;可直接运行。 2-46 短时能量 短时过零率 端点检测 - 小红书 (xiaohongshu.com)

未来的智能农业:智能合约如何提升农业生产效率和可持续性

随着全球人口的增长和资源的有限性&#xff0c;农业生产面临着越来越大的挑战。如何在提高生产效率的同时保障可持续发展成为全球农业发展的关键问题。智能合约作为一种基于区块链技术的自动化执行合约&#xff0c;正在逐渐应用于农业领域&#xff0c;为农业生产带来了新的机遇…

【MATLAB源码-第238期】基于simulink的三输出单端反激flyback仿真,通过PWM和PID控制能够得到稳定电压。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 概述 反激变换器是一种广泛应用于电源管理的拓扑结构&#xff0c;特别是在需要隔离输入和输出的应用中。它的工作原理是利用变压器的储能和释放能量来实现电压转换和隔离。该图展示了一个通过脉宽调制&#xff08;PWM&#…

C++——QT:保姆级教程,从下载到安装到用QT写出第一个程序

登录官网&#xff0c;在官网选择合适的qt版本进行下载 这里选择5.12.9版本 点击exe文件下载&#xff0c;因为服务器在国外&#xff0c;国内不支持&#xff0c;所以可以从我的网盘下载 链接: https://pan.baidu.com/s/1XMILFS1uHTenH3mH_VlPLw 提取码: 1567 --来自百度网盘超级…

git merge VS git rebase VS git cherry-pick

git merge VS git rebase VS git cherry-pick 在Git中&#xff0c;git merge、git rebase和git cherry-pick都是用于整合不同分支中的更改到当前分支的命令。它们各有特点和适用场景。 Git Merge git merge 是一种将一个分支的更改合并到另一个分支的方法。它创建一个新的提…

用Postman Flows打造你的专属API:外部公开,轻松上手!

引言 Postman Flows 是一个使用 GUI 进行无代码 API 调用流程创建的服务。这篇文章我尝试使用 Flows 来构建将 Momento Topic 中的数据保存到 TiDB 的保存 API&#xff0c;因此想分享一些使用过程中的技巧等。 实现内容 将从 Momento Topics 配发的 JSON 数据保存到 TiDB 中。…

算法-BFS搜索

题目一 解题思路 比较标准的暴力搜索空间换时间的策略 二维数组map表示具体地图&#xff0c;far表示遍历过程中某点到起点的距离。 队列 q 表示在遍历过程中当前距离的所以节点坐标。 每次的节点寻找其上下左右四个方向可以继续前进的点&#xff08;这里在过程中会发生两个…

Java之多线程-同步代码块

线程同步 Java中提供了线程同步的机制&#xff0c;来解决上述的线程安全问题。 Java中实现线程同步&#xff0c;主要借助synchronized关键字实现。 线程同步方式&#xff1a; 同步代码块 同步方法 锁机制 1&#xff09;同步代码块 格式&#xff1a; //Object类及其子类…

Web网页端IM产品RainbowChat-Web的v7.1版已发布

一、关于RainbowChat-Web RainbowChat-Web是一套Web网页端IM系统&#xff0c;是RainbowChat的姊妹系统&#xff08;RainbowChat是一套基于开源IM聊天框架 MobileIMSDK (Github地址) 的产品级移动端IM系统&#xff09;。 ► 详细介绍&#xff1a;http://www.52im.net/thread-2…

研发(RD)注意事项 / 复杂项目规划、控制方法 PERT 和 CPM

注&#xff1a;机翻&#xff0c;未校对&#xff0c;去掉了原文中广告。 What Is Research and Development (R&D)? 什么是研发&#xff08;R&D&#xff09;&#xff1f; Investopedia / Ellen Lindner Research and Development An ongoing effort to develop or impr…

Spring Boot入门指南:留言板

一.留言板 1.输⼊留⾔信息,点击提交.后端把数据存储起来. 2.⻚⾯展⽰输⼊的表⽩墙的信息 规范&#xff1a; 1.写一个类MessageInfo对象&#xff0c;添加构造方法 虽然有快捷键&#xff0c;但是还是不够偷懒 项目添加Lombok。 Lombok是⼀个Java⼯具库&#xff0c;通过添加注…

Java | Leetcode Java题解之第283题移动零

题目&#xff1a; 题解&#xff1a; class Solution {public void moveZeroes(int[] nums) {int n nums.length, left 0, right 0;while (right < n) {if (nums[right] ! 0) {swap(nums, left, right);left;}right;}}public void swap(int[] nums, int left, int right)…

AI/机器学习(计算机视觉/NLP)方向面试复习3

1. Pooling 有哪些方式&#xff1f;pytorch的实现&#xff1f; Pooling可以分成&#xff1a;最大池化&#xff0c;平均池化&#xff0c;全局平均池化&#xff0c;随机池化&#xff0c;空间金字塔池化。 1. 最大池化&#xff08;Max Pooling&#xff09; 最大池化是最常用的池…

将Android Library项目发布到JitPack仓库

将项目代码导入Github 1.将本地项目目录初始化为 Git 仓库。 默认情况下&#xff0c;初始分支称为 main; 如果使用 Git 2.28.0 或更高版本&#xff0c;则可以使用 -b 设置默认分支的名称。 git init -b main 如果使用 Git 2.27.1 或更低版本&#xff0c;则可以使用 git symbo…

【Django】前端技术-网页样式表CSS

文章目录 一、申明规则CSS的导入方式行内样式内部样式外部样式 二、CSS的选择器1. 基本选择器标签选择器&#xff1a; 选择一类标签 标签{}类选择器 class&#xff1a; 选择所有class属性一致的表情&#xff0c;跨标签.类名{}ID选择器&#xff1a;全局唯一 #id名{} 2.层次选择器…

Element快速学习

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;JavaWeb关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 什么是Element&#xff1f; Element&#xff1a;它是由饿了么团队开发的一个…