powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Перебор списка с условием.
19 сообщений из 19, страница 1 из 1
Перебор списка с условием.
    #39612081
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Наверное скучали
Итак, ситуация следующая:
Есть папка с файлами, я её сканю и получаю список файлов, который аккурат кладу в arraylist.
Начинаю перебирать его(arraylist) для того чтобы выкинуть лишнее.
А лишнее определяется следующим образом:
Например, если есть в именах последующих файлов есть имя текущего(без расширения), то из них надо оставить текущий. (Например, есть файлы system.img, system.new.dat, system.new.dat.br, из этого перечня надо оставить лишь system.img. Если, например, есть system.new.dat, system.new.dat.br, то оставить только system.new.dat, ну и по аналогии с любым именем файла(без расширения));
Второй день туплю, цикл построить не могу в голове.
...
Рейтинг: 0 / 0
Перебор списка с условием.
    #39612095
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlackeAngel,

Правильно ли я понимаю что берется первый файл и сравнивается с последующими? или оно может быть из середины списка?
...
Рейтинг: 0 / 0
Перебор списка с условием.
    #39612123
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит из середины? Ты же говоришь первый типа оставляем а последующие нет. А если в середину тыкнуть откуда ты знаешь какой из них первый? )

Имхо первое что тебе надо это замутить цикл в цикле где первый элемент берется и последовательно сравнивается с остальными и если элемент первого цикла совпадает (contains) с элементом второго цикла - то мы его удаляем из листа. И так со всем. Правда сложность выйдет n2 ))

Если лень писать код модно сделать обман - создаёшь объект с полем стринги и переписываешь ему методы хэшкод и иквалз таким образом чтоб иквалз выдавал тру если одна строка является частью другой строки. )) а хэш у всех одинаковый. Потом конвертишь лист в сет и вуаля )) у тебя всех по одному. Тут комплексити будет уже n
Вроде. А может и нет
...
Рейтинг: 0 / 0
Перебор списка с условием.
    #39612145
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreykaT, круто, но как пересчитывать количество элементов для каждого цикла после каждого удаления?
...
Рейтинг: 0 / 0
Перебор списка с условием.
    #39612146
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngel,

У вас пример немного не совпадает с условием.
"если есть в именах последующих файлов есть имя текущего"
то что на счет
system.img
и
AsystemZ.dat
?

Забавно что вы главное условие вашей бизнес-логики пишете после слова "Например". Значит ли это что есть и какие-то другие условия?
...
Рейтинг: 0 / 0
Перебор списка с условием.
    #39612147
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngelandreykaT, круто, но как пересчитывать количество элементов для каждого цикла после каждого удаления?
А зачем это? Просто нужна функция мержа, которая из двух файлов выберет кратчайший и оставит только его.
...
Рейтинг: 0 / 0
Перебор списка с условием.
    #39612148
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopBlackeAngel,

Правильно ли я понимаю что берется первый файл и сравнивается с последующими? или оно может быть из середины списка?
Я бы исходил из того что список не упорядочен.
...
Рейтинг: 0 / 0
Перебор списка с условием.
    #39612149
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngel,

Ваше условие можно интерпретировать разными способами. Но, в целом, решение сводится к тому что вам нужно из каждого имени вычислять ключ и по нему складывать в Map. Но вот с вычислением ключа возможные разные варианты иходя из расплывчатости исходного условия.
Важен ли порядок файлов или только длина имён?
Совпадают ли имена файлов полностью до расширения, или частично?
Если нужно частичное совпадение, то может ли оно быть в любой позиции или только в начале?
...
Рейтинг: 0 / 0
Перебор списка с условием.
    #39612150
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, погорячился на счёт совпадения. Имена равны до расширения.
...
Рейтинг: 0 / 0
Перебор списка с условием.
    #39612152
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngel,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
List<String> fileNames ...
fileNames.stream()
         .collect(Collectors.toMap(this::nameToKey, 
                                   name -> name, 
                                   this::chooseFromTwoNames));

String nameToKey(String name){
   return name.substring(name.indexOf("."));
}

String chooseFromTwoNames(String first, String seconds) {
     //Если нужно первое по порядку, то 
     return first;
     //Если нужно самое длинное, то
     first.length() < second.length() ? first : second;
}
...
Рейтинг: 0 / 0
Перебор списка с условием.
    #39612165
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngelBlazkowicz, погорячился на счёт совпадения. Имена равны до расширения.
стоп. ты же выше сказал что и после точки учитывается? типа два имени name.some.part и name.some и name.another мы берем второе и третьему ищем совпадение дальше?
...
Рейтинг: 0 / 0
Перебор списка с условием.
    #39612166
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как то автор все усложнил. Можно почистить файлы по расширению.
...
Рейтинг: 0 / 0
Перебор списка с условием.
    #39612167
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,например?
...
Рейтинг: 0 / 0
Перебор списка с условием.
    #39612169
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreykaT,
Метод Blazkowicz, в принципе решает проблему,однако, длинна может быть одинаковой.
Да и имя файла так не найдешь(у меня берется с путями,Но это решается на раз два)
Задача состоит в том чтобы оставить файлы с приоритетными расширениями, но они так же меняются при наличии/отсутствии того или иного расширения.
...
Рейтинг: 0 / 0
Перебор списка с условием.
    #39612179
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пока ты не сможешь внятно изложить логику не будет и внятного решения.
...
Рейтинг: 0 / 0
Перебор списка с условием.
    #39612184
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngelmayton,например?
Ну... много варинтов вижу. Например однозначно удаляется расширение *.br.
Или из всех имен ("system.*") оставить самое короткое.

Вобщем список рулов должен быть максимально простым.
...
Рейтинг: 0 / 0
Перебор списка с условием.
    #39612220
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот первый набросок, но он полон ошибок и косяков, как их исправить я е знаю.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
kk=spisok.size();
for(int i=0;i<kk;i++){
name=spisok[i].substring(substring(spisok[i].lastIndexOf("/"), spisok[i].indexOf("."));
	for(int j=i+1;j<kk;j++){
		if(spisok[i].equals(spisok[j])=true){
			spisok.remove(j);
			j=j-1;
			i=i-1;
			kk=spisok.size();
		}
	}
}
...
Рейтинг: 0 / 0
Перебор списка с условием.
    #39612221
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вру, не так
...
Рейтинг: 0 / 0
Перебор списка с условием.
    #39612226
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
kk=spisok.size();
for(int i=0;i<kk;i++){
name=spisok[i].substring(substring(spisok[i].lastIndexOf("/"), spisok[i].indexOf("."));
	for(int j=i+1;j<kk;j++){
		if(spisok[j].contains(name)){
			name1=spisok[j].substring(substring(spisok[j].lastIndexOf("/"), spisok[j].indexOf("."));
			if(name.equals(name1)=true){
				spisok.remove(j);
				j=j-1;
				i=i-1;
				kk=spisok.size();
			}
		}
	}
}
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Перебор списка с условием.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]