Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Перебор списка с условием. / 19 сообщений из 19, страница 1 из 1
07.03.2018, 22:20
    #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
07.03.2018, 23:23
    #39612095
Tsyklop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор списка с условием.
BlackeAngel,

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

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

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

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

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

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

Ваше условие можно интерпретировать разными способами. Но, в целом, решение сводится к тому что вам нужно из каждого имени вычислять ключ и по нему складывать в Map. Но вот с вычислением ключа возможные разные варианты иходя из расплывчатости исходного условия.
Важен ли порядок файлов или только длина имён?
Совпадают ли имена файлов полностью до расширения, или частично?
Если нужно частичное совпадение, то может ли оно быть в любой позиции или только в начале?
...
Рейтинг: 0 / 0
08.03.2018, 08:47
    #39612150
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор списка с условием.
Blazkowicz, погорячился на счёт совпадения. Имена равны до расширения.
...
Рейтинг: 0 / 0
08.03.2018, 08:55
    #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
08.03.2018, 10:48
    #39612165
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор списка с условием.
BlackeAngelBlazkowicz, погорячился на счёт совпадения. Имена равны до расширения.
стоп. ты же выше сказал что и после точки учитывается? типа два имени name.some.part и name.some и name.another мы берем второе и третьему ищем совпадение дальше?
...
Рейтинг: 0 / 0
08.03.2018, 10:54
    #39612166
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор списка с условием.
Как то автор все усложнил. Можно почистить файлы по расширению.
...
Рейтинг: 0 / 0
08.03.2018, 11:01
    #39612167
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор списка с условием.
mayton,например?
...
Рейтинг: 0 / 0
08.03.2018, 11:06
    #39612169
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор списка с условием.
andreykaT,
Метод Blazkowicz, в принципе решает проблему,однако, длинна может быть одинаковой.
Да и имя файла так не найдешь(у меня берется с путями,Но это решается на раз два)
Задача состоит в том чтобы оставить файлы с приоритетными расширениями, но они так же меняются при наличии/отсутствии того или иного расширения.
...
Рейтинг: 0 / 0
08.03.2018, 11:36
    #39612179
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор списка с условием.
пока ты не сможешь внятно изложить логику не будет и внятного решения.
...
Рейтинг: 0 / 0
08.03.2018, 11:48
    #39612184
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор списка с условием.
BlackeAngelmayton,например?
Ну... много варинтов вижу. Например однозначно удаляется расширение *.br.
Или из всех имен ("system.*") оставить самое короткое.

Вобщем список рулов должен быть максимально простым.
...
Рейтинг: 0 / 0
08.03.2018, 13:23
    #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
08.03.2018, 13:25
    #39612221
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор списка с условием.
Вру, не так
...
Рейтинг: 0 / 0
08.03.2018, 13:31
    #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
Форумы / Java [игнор отключен] [закрыт для гостей] / Перебор списка с условием. / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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