알고리즘 팁 - 1

List <-> Array

int 아닐 때

Array -> List

String[] arr = {"a", "b", "c"};
List<String> list = Arrays.asList(arr);
String[] arr = {"a", "b", "c"};
List<String> list = new ArrayList<>(Arrays.asList(arr));
String[] arr = {"a", "b", "c"};
List<String> list = Stream.of(arr).collect(Collectors.toList)

List -> Array

ArrayList<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");

String[] arr = list.toArray(new String[arr.size()]);

int일 때

Array -> List

int[] arr = {1, 2, 3};
List<Integer> list = Arrays.stream(arr)
                            .boxed()
                            .collect(Collectors.toList());

List -> Array

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);

int[] arr = list.stream()
                .mapToInt(i -> i)
                .toArray();

Stream - distinct()

List<String> names = Arrays.asList("a", "a", "b", "c", "c");
names.stream()
     .distinct()
     .forEach(System.out::println);

Map에서 Key, Value 활용

Map의 key값, value 값 중 최대값

Map<Integer, Integer> map = new HashMap<>();
map.put(1, 2);
map.put(2, 12);
map.put(3, 12);
map.put(4, 23);

int max = Collections.max(map.values());

for (Map.Entry<Integer, Integer> m : map.entrySet()) {
    if (m.getValue() == max) {
        System.out.println(m.getKey());
    }
}

Map 정렬하기 - List를 이용

Map<String, Integer> map = new HashMap<>();
map.put("Poogle", 3);
map.put("Lena", 1);
map.put("Solar", 2);
map.put("Jay", 5);

List<String> keyList = new ArrayList<>(map.keySet());
keyList.sort((s1, s2) -> s1.compareTo(s2));
// keyList.sort(String::compareTo); 도 가능

for (String key : keyList) {
    System.out.println("key: " + key);
}

Map 정렬하기 - Collections.sort 이용(오름차순, 내림차순)

Map<String, Integer> map = new HashMap<>();
map.put("Poogle", 3);
map.put("Lena", 1);
map.put("Solar", 2);
map.put("Jay", 5);

List<String> keyList = new ArrayList<>(map.keySet());

//오름차순
Collections.sort(keyList, (value1, value2) -> (map.get(value1).compareTo(map.get(value2))));

//내림차순
Collections.sort(keyList, (value1, value2) -> (map.get(value2).compareTo(map.get(value1))));

for (String key : keyList) {
    System.out.println("key: " + key);
    System.out.println("value: " + map.get(key));
}

Map 정렬하기 - Stream을 이용

Map<String, Integer> map = new HashMap<>();
map.put("Poogle", 3);
map.put("Lena", 1);
map.put("Solar", 2);
map.put("Jay", 5);

//key로 정렬하기
List<Map.Entry<String, Integer>> entries = map.entrySet().stream()
        .sorted(Map.Entry.comparingByKey())
        .collect(Collectors.toList());

//value로 정렬하기
entries = map.entrySet().stream()
        .sorted(Map.Entry.comparingByValue())
        .collect(Collectors.toList());

for (Map.Entry<String, Integer> entry : entries) {
    System.out.println("key: " + entry.getKey());
    System.out.println("value: " + entry.getValue());
}