10
Апр
2018

Проверить элементы одного массива на совпадения с элементами другого массива

У меня есть два массива, которые содержат форматы в виде строки. К примеру:

formatsStorage [png, txt, doc]
formatsFile [jpg, txt, doc]

Элементы массивов могут располагаться в любой последовательности. Пример:

formatsStorage [doc, png, txt]
formatsFile [txt, jpg, doc]

Мне надо создать метод, который будет проверять все ли форматы из formatsFile, будут идентичны форматам из formatsStorage. Метод должен возвращать true если каждый формат из массива formatsFile будет находиться в массиве formatsStorage, а false возвращается если в массиве formatsFile будет находиться формат, которого нет в массиве formatsStorage.

Вот что у меня получилось пока сделать, но работает неправильно:

public boolean checkFormatAll(List<File> filesFrom, Storage storageTo) throws Exception {
    if (filesFrom == null || storageTo == null)
        throw new Exception("Incoming data contains an error");

    String[] formatsStorage = storageTo.getFormatSupported().split(",");

    Set<String> strings = new HashSet<>();

    for (File file : filesFrom) {
        strings.add(file.getFormat());
    }

    String[] formatsFile = strings.toArray(new String[strings.size()]);

    System.out.println("Formats in Storage " + Arrays.toString(formatsStorage));
    System.out.println("Formats in file " + Arrays.toString(formatsFile));

    boolean format = true;
    int countStorage = 0;
    int countFile = 0;

    /*if (formatsFile.length == 1){
        for (String fileFormat : formatsFile){
            for (String storageFormat : formatsStorage){
                if (fileFormat != null && storageFormat != null && fileFormat.equals(storageFormat.trim())){
                    return true;
                }
                else format = false;
            }
        }
    }*/  //Не знаю, оставлять это в отдельном ифе или всё делать в одном ?

    for (String fileFormat : formatsFile) {
        if (fileFormat != null) {
            for (String storageFormat : formatsStorage) {
                if (storageFormat != null && fileFormat.equals(storageFormat.trim()) && formatsFile.length == 1) {
                    return true;
                } else format = false;

                if (storageFormat != null && !fileFormat.equals(storageFormat.trim()) && formatsFile.length != 1) {
                    continue;
                } else format = false;

                if (storageFormat != null && !fileFormat.equals(storageFormat.trim()) && formatsFile.length - 1 != countFile) {
                    continue;
                }

                if (storageFormat != null && fileFormat.equals(storageFormat.trim())) {
                    format = true;
                    break;
                }

                System.out.println("Format in box storage - " + storageFormat + "; Line array Storage - " + countStorage);
                System.out.println("Format in box file - " + fileFormat + "; Line array File - " + countFile);

                countStorage++;
            }
            countFile++;
        }
    }
    return format;
}

Я понимаю, что надо сравнивать каждый элемент массива formatsFile с элементами массива formatsStorage. Для этого иду двойным циклом по элементам formatsStorage, но по всей видимости делаю ошибку в условиях сравнения. Помогите исправить ошибку.

Источник: https://ru.stackoverflow.com/questions/812200/%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D1%8C-%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B-%D0%BE%D0%B4%D0%BD%D0%BE%D0%B3%D0%BE-%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0-%D0%BD%D0%B0-%D1%81%D0%BE%D0%B2%D0%BF%D0%B0%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F-%D1%81-%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BC%D0%B8-%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B3%D0%BE-%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0

Тебе может это понравится...

Добавить комментарий