Java 8 코딩 및 프로그래밍 면접 질문과 답변

이 글에서는 Java 8 코딩 및 프로그래밍 면접 질문과 답변을 공유하겠습니다. 아래 질문들을 풀기 위해 Stream API 함수만 사용했습니다.

1. 정수 목록에 있는 모든 짝수를 찾아내는 방법은 무엇일까요?

1
2
3
4
5
6
List<Integer> list = Arrays.asList(10, 15, 8, 49, 25, 98, 32);
list.stream()
.filter(n -> n % 2 == 0)
.forEach(System.out::println);

// Output: 10, 8, 98, 32

2. 정수 목록에서 1로 시작하는 모든 숫자를 찾아낼 수 있나요?

1
2
3
4
5
6
7
List<Integer> myList = Arrays.asList(10, 15, 8, 49, 25, 98, 32);
myList.stream()
.map(s -> s + "") // Convert integer to String
.filter(s -> s.startsWith("1"))
.forEach(System.out::println);

// Output: 10, 15

3. 정수 목록에서 중복된 요소를 찾는 방법은 무엇입니까?

1
2
3
4
5
6
7
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);

// Output: 98, 15

중복된 요소를 제거할 수도 있습니다.

1
2
3
4
5
6
7
// distinct() 키워드를 사용하여 중복된 요소를 제거합니다.
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));

// Output: 1 85 6 2 3 65 45 5662 2582 266 666 656

또는 아래 방법을 사용할 수도 있습니다.

1
2
3
4
5
6
7
8
List<Integer> myList = Arrays.asList(1, 1, 85, 6, 2, 3, 65, 6, 45, 45, 5662, 2582, 2, 2, 266, 666, 656);
Set<Integer> set = new HashSet<>(myList);

// 필요한 경우 Set을 다시 List로 변환합니다.
List<Integer> uniqueData = set.stream().collect(Collectors.toList());
uniqueData.forEach(System.out::println);

// Output : 1 65 2 3 6 266 45 656 85 2582 666 5662

4. 정수 목록의 첫 번째 요소를 찾으세요.

1
2
3
4
5
6
List<Integer> myList = Arrays.asList(10, 15, 8, 49, 25, 98, 98, 32, 15);
myList.stream()
.findFirst()
.ifPresent(System.out::println);

// Output: 10

5. 정수 목록에 있는 총 요소의 개수를 찾으세요.

1
2
3
4
5
List<Integer> myList = Arrays.asList(10, 15, 8, 49, 25, 98, 98, 32, 15);
long count = myList.stream().count();
System.out.println(count);

// Output: 9

6. 정수 목록에 있는 최대값 요소를 찾으세요.

1
2
3
4
5
6
7
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);

// Output: 98

7. 문자열에서 반복되지 않는 첫 번째 문자를 찾으세요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
String input = "Java articles are Awesome";

Character result = input.chars() // Stream of String
.mapToObj(s -> Character.toLowerCase(Character.valueOf((char) s))) // 먼저 Character 객체로 변환한 다음 소문자로 변환합니다.
.collect(Collectors.groupingBy(Function.identity(), LinkedHashMap::new, Collectors.counting())) // map에 문자를 key로 카운팅한 숫자를 value로 저장합니다.
.entrySet()
.stream()
.filter(entry -> entry.getValue() == 1L)
.map(entry -> entry.getKey())
.findFirst()
.get();
System.out.println(result);

// Output: j

8. 문자열에서 반복되는 첫 번째 문자를 찾으세요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
String input = "Java Articles are Awesome";

Character result = input.chars() // Stream of String
.mapToObj(s -> Character.toLowerCase(Character.valueOf((char) s))) // 먼저 Character 객체로 변환한 다음 소문자로 변환합니다.
.collect(Collectors.groupingBy(Function.identity(), LinkedHashMap::new, Collectors.counting())) // map에 문자를 key로 카운팅한 숫자를 value로 저장합니다.
.entrySet()
.stream()
.filter(entry -> entry.getValue() > 1L)
.map(entry -> entry.getKey())
.findFirst()
.get();
System.out.println(result);

// Output: a

9. 정수 목록에 있는 모든 값을 정렬하세요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
List<Integer> myList = Arrays.asList(10, 15, 8, 49, 25, 98, 98, 32, 15);
myList.stream()
.sorted()
.forEach(System.out::println);

// Output:
8
10
15
15
25
32
49
98
98

10. 정수 목록에 있는 모든 값을 내림차순으로 정렬하세요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
List<Integer> myList = Arrays.asList(10, 15, 8, 49, 25, 98, 98, 32, 15);
myList.stream()
.sorted(Collections.reverseOrder())
.forEach(System.out::println);

//Output:
98
98
49
32
25
15
15
10
8

11. 정수 배열 nums가 주어졌을 때 배열에 어떤 값이 두 번 이상 나타나면 true을 반환하고 모든 요소가 고유하면 false를 반환합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public boolean containsDuplicate(int[] nums) {
List<Integer> list = Arrays.stream(nums).boxed().collect(Collectors.toList());
Set<Integer> set = new HashSet<>(list);

if (set.size() == list.size()) {
return false;
}
return true;
}

Input: nums = [1,2,3,1]
Output: true

Input: nums = [1,2,3,4]
Output: false

12. Java 8에서 날짜 및 시간 API를 사용하여 현재 날짜와 시간을 어떻게 구하나요?

1
2
3
4
5
6
7
8
// LocalDate API를 사용하여 날짜 가져오기
System.out.println("Current Local Date: " + java.time.LocalDate.now());

// 시간을 얻기 위해 LocalTime API 사용
System.out.println("Current Local Time: " + java.time.LocalTime.now());

//날짜와 시간을 모두 얻기 위해 LocalDateTime API 사용
System.out.println("Current Local Date and Time: " + java.time.LocalDateTime.now());

13. 두 개의 Stream을 연결하는 Java 8 프로그램을 작성하세요.

1
2
3
4
5
6
7
8
List<String> list1 = Arrays.asList("Java", "8");
List<String> list2 = Arrays.asList("explained", "through", "programs");

// list1과 list2를 Stream으로 변환하여 연결했습니다.
Stream<String> concatStream = Stream.concat(list1.stream(), list2.stream());

// 연결된 Stream을 출력했습니다.
concatStream.forEach(str -&gt; System.out.print(str + " "));

14. list 요소에 cube를 적용하고 50보다 큰 숫자를 필터링하는 프로그램을 작성하세요.

1
2
3
4
5
6
7
8
9
10
11
List<Integer> integerList = Arrays.asList(4, 5, 6, 7, 1, 2, 3);
integerList.stream()
.map(i -> i * i * i)
.filter(i -> i > 50)
.forEach(System.out::println);

// Output:
64
125
216
343

15. 배열을 정렬한 다음 정렬된 배열을 Stream으로 변환하는 Java 8 프로그램을 작성하세요.

1
2
3
4
5
6
7
int arr[] = { 99 , 55 , 203 , 99 , 4 , 91 };

// parallelSort()를 사용하여 배열을 정렬합니다.
Arrays.parallelSort(arr);

// 스트림으로 변환한 다음 forEach를 사용하여 인쇄합니다.
Arrays.stream(arr).forEach(n > System.out.print(n + " " ));

16. Java 8에서 객체를 대문자로 변환하기 위해 map을 어떻게 사용하나요.

1
2
3
4
List<String> nameLst = names.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(nameLst);

17. 문자열 배열 목록의 각 요소/단어를 계산하는 방법은 무엇인가요?

1
2
3
4
5
6
7
List<String> names = Arrays.asList("AA", "BB", "AA", "CC");
Map<String,Long> namesCount = names.stream()
.collect(Collectors.groupingBy(Function.identity(),
Collectors.counting()));
System.out.println(namesCount);

// Output: {CC=1, BB=1, AA=2}

18. 문자열 배열 목록에서 개수가 중복된 요소만 찾는 방법은 무엇인가요?

1
2
3
4
5
6
7
List<String> names = Arrays.asList("AA", "BB", "AA", "CC");
Map<String,Long> namesCount = names.stream()
.filter(x -> Collections.frequency(names, x) > 1)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(namesCount);

// Output: {AA=2}
Share