前言
自 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 提供了一种简洁且高效的方法来处理集合数据。以下是解决这个问题的代码示例:
代码语言:java复制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);
}
}
输出:
代码语言:java复制10, 8, 98, 32
问题 2:给定一个整数列表,使用 Stream 函数找出所有以 1 开头的数字?
通过 Stream API,可以很容易地找到以特定数字开头的元素。以下是代码示例:
代码语言:java复制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);
}
}
输出:
代码语言:java复制10, 15
问题 3:如何使用 Stream 函数在给定的整数列表中找到重复元素?
利用 Stream API,我们可以轻松找到列表中的重复元素。以下是两种方法:
方法1:
代码语言:java复制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);
}
}
输出:
代码语言:java复制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));
}
输出:
代码语言:java复制1, 85, 6, 2, 3, 65, 45, 5662, 2582, 266, 666, 656
问题4:给定一个整数列表,使用 Stream 函数找出列表中的第一个元素?
代码语言:java复制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);
}
}
输出:
代码语言:java复制10
问题5:给定一个整数列表,使用 Stream 函数计算列表中元素的总数?
代码语言:java复制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);
}
}
输出:
代码语言:java复制9
问题 6:给定一个整数列表,使用 Stream 函数找出其中的最大值?
代码语言:java复制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);
}
}
输出:
代码语言:java复制98
问题 7:给定一个字符串,使用 Stream 函数找出其中第一个不重复的字符?
代码语言:java复制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);
}
}
输出:
代码语言:java复制j
问题 8:给定一个字符串,使用 Stream 函数找出其中第一个重复的字符?
代码语言:java复制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);
}
}
输出:
代码语言:java复制a
问题 9:给定一个整数列表,使用 Stream 函数对列表中的值进行排序?
代码语言:java复制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);
}
}
输出:
代码语言:java复制8
10
15
15
25
32
49
98
98
问题 10:给定一个整数列表,使用 Stream 函数按降序排序列表中的值?
代码语言:java复制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);
}
}
输出:
代码语言:java复制98
98
49
32
25
15
15
10
8
问题 11:给定一个整数数组 nums,如果数组中任何值至少出现两次则返回 true,如果每个元素都不同则返回 false?
代码语言:java复制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();
}
输入:
代码语言:java复制nums = [1,2,3,1]
输出:
代码语言:java复制true
输入:
代码语言:java复制nums = [1,2,3,4]
输出:
代码语言:java复制false
问题 12:如何使用 Java 8 Date 和 Time API 获取当前日期和时间?
代码语言:java复制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获取时间戳
}
}
输出:
代码语言:java复制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 函数将一个字符串列表连接成一个单独的字符串?
代码语言:java复制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复制Java is fun
问题 14:给定一个字符串数组,使用 Stream 函数找出其中最长的字符串?
代码语言:java复制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);
}
}
输出:
代码语言:java复制Programming
问题 15:如何使用 Stream 函数将一个数字列表转换为它们的平方数列表?
代码语言:java复制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);
}
}
输出:
代码语言:java复制[1, 4, 9, 16, 25]
问题 16:如何使用 Stream 函数计算整数列表的平均值?
代码语言:java复制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);
}
}
输出:
代码语言:java复制30.0
问题 17:如何使用 Stream 函数找出字符串列表中所有不为空且长度大于 3 的字符串?
代码语言:java复制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复制[Java, Stream, Programming]
问题 18:如何使用 Stream 函数找出字符串列表中最长的字符串的长度?
代码语言:java复制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);
}
}
输出:
代码语言:java复制11
问题 19:如何使用 Stream 函数对字符串列表进行排序并转换为大写?
代码语言:java复制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);
}
}
输出:
代码语言:java复制[API, JAVA, LANGUAGE, PROGRAMMING, STREAM]
问题 20:如何使用 Stream 函数将一个整数列表中的所有元素翻倍?
代码语言:java复制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);
}
}
输出:
代码语言:java复制[2, 4, 6, 8, 10]
结语
以上问题和解决方案展示了如何利用 Java 8 中的 Stream API 进行高效的数据处理。这些示例不仅帮助你准备面试问题,还可以作为实际开发中的参考。
通过这些示例,你可以看到 Stream API 在处理集合数据时的强大功能和简洁语法。这些技能对于现代 Java 开发者来说至关重要,特别是在处理大数据集和实现复杂的数据操作时。
希望这些内容对你有所帮助,并祝你在Java编程的道路上取得更大的成就!