Как вернуть массив, содержащий значения, которые появляются в двух массивах? И никаких дубликатов

Я хочу передать два массива имен, чтобы он возвращал массив, содержащий имена, которые появляются в одном или обоих массивах. Возвращаемый массив не должен иметь дубликатов.

Например, вызов MergeNames.uniqueNames(new String[]{'Ava', 'Emma', 'Olivia'}, new String[]{'Olivia', 'Sophia', 'Emma'}) должен вернуть массив, содержащий Аву, Эмму, Оливию и Софию в любом порядке.

Необходимо в основном реализовать метод uniqueNames. Извините за вопрос, я новичок в программировании на Java и пытаюсь стать разработчиком, пытаясь решить проблемы с кодированием.

public class MergeNames {

    public static String[] uniqueNames(String[] names1, String[] names2) {
        throw new UnsupportedOperationException("Waiting to be implemented.");      
    }

    public static void main(String[] args) {
        String[] names1 = new String[] {"Ava", "Emma", "Olivia"};
        String[] names2 = new String[] {"Olivia", "Sophia", "Emma"};
        System.out.println(String.join(", ", MergeNames.uniqueNames(names1, names2))); // should print Ava, Emma, Olivia, Sophia
    }
}

******МОЕ РЕШЕНИЕ ЛЮБОЙ ОТЗЫВ ДОБРО ПОЖАЛОВАТЬ*****

import java.util.*;

public class MergeNames {

public static void main(String[] args) {

    String[] names1 = new String[] {"Ava", "Emma", "Olivia"};
    String[] names2 = new String[] {"Olivia", "Sophia", "Emma"};

    Set<String> mySet1 = new HashSet<String>(Arrays.asList(names1));
    Set<String> mySet2 = new HashSet<String>(Arrays.asList(names2));

    Set<String> union = new HashSet<String>(mySet1);
    union.addAll(mySet2);
    System.out.println("Union of the two Sets with no duplicate names : " + union);

}
}

Я не уверен, зачем нужна функция uniqueNames?


person RShome    schedule 18.04.2019    source источник
comment
Тогда давай: попробуй! Попробуйте, и мы будем рады помочь вам с конкретными проблемами.   -  person Andy Turner    schedule 18.04.2019
comment
Это пахнет домашней работой, но если бы мне действительно пришлось делать это на Java, массив, вероятно, не тот тип коллекции, который я бы использовал.   -  person Tim Biegeleisen    schedule 18.04.2019
comment
Обещаю, это не домашнее задание. Я пытаюсь кодировать вызовы. И я даже не знаю, как начать.   -  person RShome    schedule 18.04.2019
comment
Ага. Каждый раз, когда вам нужно выполнять манипуляции с коллекциями данных, массивы не будут первым выбором, если у вас уже есть метод .retainAll() в API коллекций Java.   -  person    schedule 18.04.2019
comment
@RShome попытайтесь выяснить, какие структуры данных можно использовать для хранения уникальных значений.   -  person Andy Turner    schedule 18.04.2019
comment
или может кто-нибудь указать мне, где я могу узнать об этом?   -  person RShome    schedule 18.04.2019
comment
Вы в основном хотите создать набор. docs.oracle.com/javase/7/docs/ API/java/util/Set.html   -  person junvar    schedule 18.04.2019
comment
@junvar не то чтобы это имело значение в данном случае, но java 7 уже устарела. Вы должны ссылаться на более современную документацию.   -  person Federico klez Culloca    schedule 18.04.2019
comment
Ребята, я добавил свое решение, которое, кажется, работает в моей среде IDE. Однако задача кодирования требует использования отдельной функции. Зачем это нужно? Затем мне нужно будет передать объединенный массив в качестве параметра в методе Main(), что не разрешено.   -  person RShome    schedule 19.04.2019


Ответы (2)


В комментариях вы упомянули, что вам нужно сделать это другим методом и передать совместный массив в качестве параметра обратно в main(). Что ж, под этим утверждением я думаю, что они имеют в виду, что вы должны return совместный массив вернуться к main() "Не как параметр"

Вы можете пойти следующим образом:

import java.util.*;

public class MergeNames 
{
    public static void main(String[] args) 
    {
        String[] names1 = new String[] {"Ava", "Emma", "Olivia"};
        String[] names2 = new String[] {"Olivia", "Sophia", "Emma"};
        String[] Names = mergeNames(names1, names2);
        for(String n: Names)
            System.out.print(" "+ n);
    }

    public static String[] mergeNames(String[] n1, String[] n2)
    {
        Set<String> mySet1 = new HashSet<String>(Arrays.asList(n1));
        Set<String> mySet2 = new HashSet<String>(Arrays.asList(n2));
        Set<String> union = new HashSet<String>(mySet1);
        union.addAll(mySet2);
        return  union.toArray(new String[union.size()]);
    }
}
person Zain Arshad    schedule 19.04.2019
comment
Спасибо. Извините, я все еще пытаюсь разобраться с некоторыми концепциями кодирования. Не понимаю, почему мне так трудно. - person RShome; 19.04.2019
comment
рад помочь ... счастливого кодирования :) - person Zain Arshad; 19.04.2019

Как предложил @junvar, посмотрите на java.util.Set

  • Создайте new java.util.TreeSet<String> myset
  • Переберите каждый массив и для каждого значения имени вызовите myset.add(). Set удалит дубликаты для вас
  • Чтобы преобразовать набор обратно в массив, см. раздел Преобразование набора‹String> в массив строк

Удачи !

person Conffusion    schedule 18.04.2019