Сравнение массива и списка строк - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть массив String userArray, который содержит 123 и 456. У меня также есть dbList, который содержит 123, 456 и 555

userArray[] = {"123", "456"}
List<String> dbList  = ["123","456","555"]

Я хочу сравнить userArray и dblist, используя Java 8. Поскольку 123 и 456 совпадают, оба должны быть сохранены, но 555 должны быть удалены. Только соответствующие элементы должны быть сохранены.

Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 23 апреля 2020

Сделайте это следующим образом, используя Stream:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        String userArray[] = { "123", "456" };
        List<String> dbList = new ArrayList<String>();
        dbList.add("123");
        dbList.add("456");
        dbList.add("555");

        List<String> result = Arrays.stream(userArray).filter(e -> dbList.contains(e)).collect(Collectors.toList());
        System.out.println(result);
    }
}

Выход:

[123, 456]

В качестве альтернативы, используя List :: retainAll

Вы также можете сделать это, используя List::retainAll.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String userArray[] = { "123", "456" };
        List<String> dbList = new ArrayList<String>();
        dbList.add("123");
        dbList.add("456");
        dbList.add("555");

        dbList.retainAll(Arrays.asList(userArray));
        System.out.println(dbList);
    }
}

Выход:

[123, 456]
0 голосов
/ 23 апреля 2020

Попробуйте это: он преобразует массив в список с использованием потоков, а затем использует функцию сохранения всех List для удаления нежелательных элементов. Есть лучшие способы сделать это, но вы специально подразумевали, что хотели подход streams.

     String userArray[] = {"123", "456"};
     List<String> dbList  = new ArrayList<>(List.of("123","456","555"));


     dbList.retainAll(Arrays.stream(userArray).collect(Collectors.toList()));

     System.out.println(dbList);

Печать

[123, 456]
0 голосов
/ 23 апреля 2020

Stream.filter

По dblist с использованием Java 8. Вы имеете в виду Java 8 Stream? Если это так, вы можете сделать так:

Пример

    String[] userArray = new String[]{"123","456"};
    List<String> dbList = Arrays.asList("123", "456", "555");

    List<String> matchedValues = Stream.of(userArray)
            .filter( userArrayValue -> dbList.contains(userArrayValue))
            .collect(Collectors.toList());

    System.out.println(Arrays.toString(matchedValues.toArray()));

И у вас есть вывод:

[123, 456]

Объясняя код:

Сначала мы создаем Strem из вашего userArray;

Затем мы фильтруем, используя метод фильтра Stream #;

Таким образом, каждое значение userArrayValue будет проверено, если оно существует в dbList;

Если это так, мы собираем его в новый список, вызывая Stream # collect

Вот и все.

Правка

Согласно комментарию пользователя

На самом деле мне нужно сделать это сравнение и сделать обновление и вставки в БД. Если значение существует в обоих, я ничего не делаю. Если не существует в dblist, мне придется вставить его, и если значения существуют в dblist и отсутствуют в userArray, я должен удалить его

Значения, присутствующие в dbList и отсутствующие в userArray

    String[] userArray = new String[]{"123","456"};
    List<String> userList = Arrays.asList(userArray);
    List<String> dbList = Arrays.asList("123", "456", "555");

    List<String> unMatchedValues = dbList.stream()
            .filter( userArrayValue -> !userList.contains(userArrayValue))
            .collect(Collectors.toList());

   System.out.println(Arrays.toString(unMatchedValues.toArray()));

Вывод

[555]

Значения, присутствующие в userArray, отсутствуют в dbList

    String[] userArray = new String[]{"123","456", "888"};
    List<String> dbList = Arrays.asList("123", "456");

    List<String> unMatchedValues = Stream.of(userArray)
            .filter( userArrayValue -> !dbList.contains(userArrayValue))
            .collect(Collectors.toList());

    System.out.println(Arrays.toString(unMatchedValues.toArray()));

Вывод

[888]
0 голосов
/ 23 апреля 2020
// we create a new List to hold the matches
List<String> result = new ArrayList<>();

// we iterate over the entries in the array and check, whether they are in the dbList
// when they are we add them to the result list. 
// This will only work if all entries in the user array are there only once
for(String s : userArray)
    if(dbList.contains(s))
        result.add(s);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...