Как вернуть из метода коллекцию

76
17 февраля 2022, 02:30

Есть задание в котором нужно написать метод, который будет принимать массив и возвращать количество и отсортированную коллекцию уникальных элементов. Я решил просто использовать коллекцию TreeSet так как она гарантирует уникальное множество и сама отсортирует массив. Но у меня возникла проблема. Как правильно нужно выводить саму коллекцию и как в строке mySet.addAll(arr) можно добавить все элементы из массива в коллекцию не используя цикл

    public class JavaApplication8 {
    public static void main(String[] args) {
        int[] list = {5,7,8,7,8,23,22,23,31,35,31,40,41,40,40};
        System.out.println(numUnique(list));
    }
public static int numUnique(int[] arr){
          TreeSet<Integer> mySet = new TreeSet<Integer>();
          for( int i = 0; i < arr.length; i++){
              mySet.add(arr[i]);
          }
          mySet.addAll(arr); // альтернативный вариант, что бы не использовать цикл
          return mySet.size();
    }
}
Answer 1

Вам нужно указать в описании метода тип возвращаемого значения Например :

public static TreeSet<Integer> numUnique(int[] arr){}

void - ничего не возвращает.

Answer 2

А если функционально :

public static List<Integer> numUnique(final int[] arr) {
    return Arrays.stream(arr).distinct().sorted().boxed().collect(Collectors.toList());
}

Можно так, в этом случае метод принимает любые числа, им же типизирует результат:

public <T extends Number> List<T> numUnique(final T[] arr) {
    return Arrays.stream(arr).distinct().sorted().collect(Collectors.toList());
}

Если вы можете принимать в аргументах не int[], а Integer[] , то можно еще так :

1) если у вас Java9+ то у интерфейса Set появились статические методы для инициализации (паттерн фабричный метод) , посему можно так можно :

return new TreeSet<>(Set.of(arr))

2) ну, а если версия Java9 ниже, чем указанная, и функциональный подход вам не по душе, то так:

return new TreeSet<>(Arrays.asList(arr));
READ ALSO
Spring Data Jpa как получить объект по id?

Spring Data Jpa как получить объект по id?

Я новичок в Spring и поэтому не очень понимаю почему без танцев с бубнами я не могу просто взять и получить из таблицы объект по его id

136
Как работает итератор в HashSet java

Как работает итератор в HashSet java

В LinkedHashSet есть хедер и там итератор по проходит по связному спискуНо в HashSet нет связного списка

129
Не могу понять,в чём ошибка

Не могу понять,в чём ошибка

Только начал изучать принципы "ООП"Хотел сделать программу, которая считывает символы, переводит их в смайликовый формат

122
Сериализация коллекции в Java

Сериализация коллекции в Java

Можно ли проводить сериализацию не объекта класса, а коллекции?

127