сравнивать array (string) в java и показывать только не повторенные результаты второго

У меня есть старый array и я хочу сравнить это с новым array и показать только элементы нового array без того, чтобы они были повторены в старом array.

например:

arrayviejo = (casa, jardin, arbol, cochera)
arraynuevo = (casa, jardin, cesped, calle)
arraylimpio = (cesped, calle)

А именно, вступи в брак и сад они повторяются и поэтому не должны быть, и ты подпираешь, дерево и гараж принадлежат старику array, так что также. (я использовал только слова для примера но каждый элемент array - линия 150 символов приблизительно) Я надеюсь, что понимают... Спасибо за чтение

0
задан 20.03.2019, 01:08
3 ответа

Я даю из-за факта, что ты используешь Java 8 или начальник, и что твои arrays - типа String [].

public static void main(String[] args) {
        String[] arrayViejo = {"uno", "dos", "tres"};
        String[] arrayNuevo = {"uno", "dos", "cuatro", "cinco"};

        List<String> listaVieja = Arrays.asList(arrayViejo);

        String[] arrayLimpio = Stream.of(arrayNuevo).filter(i->!listaVieja.contains(i)).toArray(String[]::new);

        for (int i = 0; i<arrayLimpio.length;i++) {
            System.out.println(arrayLimpio[i]);//sale cuatro cinco
        }
    }

BГЎsicamente:

  1. Перемещать старый array в список, чтобы облегчать работать с Г©l.

  2. Создавать stream на новом array, просачиваться для того, чтобы только остались элементы, что не estГЎn в старом списке, происходить с новым array.

0
ответ дан 02.12.2019, 05:24
  • 1
    Привет @pablo, спасибо за resuesta, функционируй совершенно – victor leroz 22.03.2019, 01:51

Их compaГ±eros дали несколько возможных решений и всех vГЎlidas.

В любом случае, если я это permitГ-s, aГ±ado какая-то reflexiГіn.

1. - Нужно иметь в виду, что это не то же самое сравнивать объекты, что цепи символов. Это не то же самое, что и у тебя был тот же объект в двух arrays, чтобы иметь два объекта с той же цепью.

В первом случае, она comparaciГіn serГ - в mГЎs rГЎpida и podrГ, - чтобы использовать (есть mГЎs формы) mГ©todo equals класс Object

En этот случай, tendrГ-эксперт, который должен пробегать (в лучшем случае) все элементы первого array. А именно, который мы говорим об одной progresiГіn aritmГ©tica. В этих случаях одна pequeГ±a улучшается serГ, - чтобы сравнивать mГЎs pequeГ±o (меньше элементов) с mГЎs большой, чтобы предотвращать ненужные повторения.

Во втором случае, ademГЎs того, чтобы быть должным пробегать все элементы array, tendrГ-эксперта, чем подтверждать цепь, которую он содержит, aГ±adiendo mГЎs время процесса.

- различие важные , которые ты должен иметь в виду.

В примере, который ты помещаешь, ты даешь несколько элементов в каждом array и не notarГЎs едва отличись между одной и другой вещью, но Вїy, если ты был должен делать эту comprobaciГіn на 10000 элементах или на 10^6? Вїy, если ademГЎs ты был должен делать эту comprobaciГіn постоянно? Уже estarГ-хозяева говоря о цене computacional важно.

2. - Нужно иметь в виду тип информации, которая хочет сохранять, и операции, которые будут осуществляться на тех же самых. У

API коллекций Java есть mГєltiples структуры данных, которые могут помогать тебе много в проблемах относительно genГ©ricos как тот, которого ты выдвигаешь.

Ввиду проблемы, которую ты предлагаешь, возможно, что array не структура mГЎs подходящая для того, чтобы сравнивать цепи символов. Если данные о ссылке будут являться относительно стабильными, возможно была лучше аккуратная структура. Эти структуры медлят mГЎs с тем, чтобы хранить немного элементы, но их окончательно mГЎs rГЎpidas в консультациях. Пример - TreeSet

Эта структура упорядочена и не допускает дубликаты, из-за которого, скорее всего, он не подает тебя, и tendrГЎs, что использовать другую, которая sГ - позволяла бы тебе иметь дубликаты или которая позволяла бы тебе манипулировать с mГєltiples трэдами ejecuciГіn и нуждался в том, чтобы синхронизироваться... список требований - пространный. Но в общем важна использовать структура данных согласно данным и использованию, которого бы станет .

В твоем случае то, что ты хочешь сделать, grosso способ, одна intersecciГіn наборов и для этого, это mГЎs правильно serГ, - которого, на вышеупомянутом TreeSet, ты осуществишь mГ©todo retainAll или removeAll интерфейс Set
Esto ты permitirГ, - когда, на структуре Java, они создают твой собственный алгоритм для нее intersecciГіn наборов segГєn parГЎmetros, который tГє сам ты счел необходимым. Хорошее этого - что вышеупомянутая структура serГ - в переиспользуемый в стольких программах, как ты нуждался.

Из-за того, что оставляет тебе ответ немного mГЎs прямая и увидь посредственно казавшийся пример чего-то, ты можешь использовать ArrayList , как они говорят их тебе compaГ±eros, вместо array bГЎsico. Если ты обращаешь внимание в ней implementaciГіn.
verГЎs, что этот класс уже осуществляет mГ©todo retainAll (), что то, что он делает, ни mГЎs ни меньше, одну intersecciГіn наборов.

Окончательно, для каждой проблемы Ваш soluciГіn.

Приветствие во все.

1
ответ дан 02.12.2019, 05:24
  • 1
    Привет @Rafa, спасибо за разъяснение, он я будет являться очень полезным, так как я буду работать с array 2000 данных, и у каждой цепи есть более 500 символов. Большое спасибо – victor leroz 22.03.2019, 01:51

Предполагая, что твои arrays были типа Арраилист де Стринг, я предлагаю тебе следующую soluciГіn:

public static void main(String []args) {
    ArrayList<String> arrayViejo =  new ArrayList<String>();
    arrayViejo.add("casa");
    arrayViejo.add("jardin");
    arrayViejo.add("arbol");
    arrayViejo.add("cochera");
    ArrayList<String> arrayNuevo = new ArrayList<String>();
    arrayNuevo.add("casa");
    arrayNuevo.add("jardin");
    arrayNuevo.add("cesped");
    arrayNuevo.add("calle");
    ArrayList<String> arrayLimpio=crearArrayLimpio(arrayViejo,arrayNuevo);
    for(String elemento: arrayLimpio){
        System.out.println(elemento);
    }
}

public static ArrayList<String> crearArrayLimpio (ArrayList<String> arrayViejo, ArrayList<String> arrayNuevo){
    ArrayList<String> arrayLimpio= new ArrayList<String>();
    for(String elemento: arrayNuevo) {
        if (!contieneElemento(arrayViejo, elemento)) arrayLimpio.add(elemento);
    }
    return arrayLimpio;
}

public static boolean contieneElemento( ArrayList<String> array, String elemento) {
    for(String elementoArray: array) {
        if (elemento.equals(elementoArray)) return true;
    }
    return false;
}
0
ответ дан 02.12.2019, 05:24
  • 1
    Привет @Montenegro, спасибо за ответ – victor leroz 22.03.2019, 01:52