이 글에서는 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);
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 + "" ) .filter(s -> s.startsWith("1" )) .forEach(System.out::println);
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);
중복된 요소를 제거할 수도 있습니다.
1 2 3 4 5 6 7 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 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); List<Integer> uniqueData = set.stream().collect(Collectors.toList()); uniqueData.forEach(System.out::println);
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);
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);
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);
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() .mapToObj(s -> Character.toLowerCase(Character.valueOf((char ) s))) .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);
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() .mapToObj(s -> Character.toLowerCase(Character.valueOf((char ) s))) .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);
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); 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); 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 System.out.println("Current Local Date: " + java.time.LocalDate.now()); System.out.println("Current Local Time: " + java.time.LocalTime.now()); 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" ); Stream<String> concatStream = Stream.concat(list1.stream(), list2.stream()); concatStream.forEach(str -> 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); 64 125 216 343
15. 배열을 정렬한 다음 정렬된 배열을 Stream으로 변환하는 Java 8 프로그램을 작성하세요.
1 2 3 4 5 6 7 int arr[] = { 99 , 55 , 203 , 99 , 4 , 91 };Arrays.parallelSort(arr); 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);
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);