powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Поиск строки в массивах которые вложены друг в друга - красивое решеение?
11 сообщений из 36, страница 2 из 2
Поиск строки в массивах которые вложены друг в друга - красивое решеение?
    #39472577
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_но паковать обратно объекты в результат сделает код немного монструознымв каком смысле паковать?
...
Рейтинг: 0 / 0
Поиск строки в массивах которые вложены друг в друга - красивое решеение?
    #39472852
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman_webdev_но паковать обратно объекты в результат сделает код немного монструознымв каком смысле паковать? - отфильтрованый результат. Вот например Blazkowicz предложил вариант со стримом. Ок, мы отфильтровали, а как обратно сибирать этот объект. Какой элемент массиива к какому принадлежит и так д...
На выходе(после фильтра) мне нужен такой же массив с вложенными массивами.
Код: java
1.
List<IssuerExportsForAllContactsWrapper> result = new ArrayList<>();
...
Рейтинг: 0 / 0
Поиск строки в массивах которые вложены друг в друга - красивое решеение?
    #39472859
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_На выходе(после фильтра) мне нужен такой же массив с вложенными массивами.
Код: java
1.
List<IssuerExportsForAllContactsWrapper> result = new ArrayList<>();


Ну, вот начинается. Задачу поставить не можем, а потом мучаемся. Объясни в каком виде результат нужен? Все вложеные списки должны быть отфильтрованы тоже? Или только топовый список фильтруется?
...
Рейтинг: 0 / 0
Поиск строки в массивах которые вложены друг в друга - красивое решеение?
    #39472877
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz_webdev_На выходе(после фильтра) мне нужен такой же массив с вложенными массивами.
Код: java
1.
List<IssuerExportsForAllContactsWrapper> result = new ArrayList<>();



Ну, вот начинается. Задачу поставить не можем, а потом мучаемся. Объясни в каком виде результат нужен? Все вложеные списки должны быть отфильтрованы тоже? Или только топовый список фильтруется? - все. Я же для этого и приводил примеры всех классов и писал, что должны остаться только те объекты, которые соответствуют условию...
Код: java
1.
name.toLowerCase().equalsIgnoreCase(serachedWord) || contactName.toLowerCase().equalsIgnoreCase(serachedWord) || filename.toLowerCase().equalsIgnoreCase(serachedWord)



Результат нужен в том же виде, который изначально приходит на обработку.
Код: java
1.
List<IssuerExportsForAllContactsWrapper> result = new ArrayList<>();
...
Рейтинг: 0 / 0
Поиск строки в массивах которые вложены друг в друга - красивое решеение?
    #39472888
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_webdev_,
Да, все списки должны быть отфильтрованы. Не только топовый список!
...
Рейтинг: 0 / 0
Поиск строки в массивах которые вложены друг в друга - красивое решеение?
    #39472891
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_ Я же для этого и приводил примеры всех классов и писал, что должны остаться только те объекты, которые соответствуют условию...
Цитата:
_webdev_При этом паковать в результат только те объекты в которых ...
Что за "паковать" такое известно было только тебе. В subj вообще речь идёт про "поиск".

А по факту тебе просто нужно удалить объекты из структуры! Просто, ведь, и понятно. И условие у тебя не правильное тоже совсем.
Ведь, если ExportWrapper содержит строку, то значит нужно оставить и всех родителей.
Выходит нужно удалить в дереве те ветки, в которых ни один узел не совпадает со строкой. Так?
...
Рейтинг: 0 / 0
Поиск строки в массивах которые вложены друг в друга - красивое решеение?
    #39472897
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczЧто за "паковать" такое известно было только тебе. В subj вообще речь идёт про "поиск". - )))) Наверное тут соглашусь, нужно будет сходить на курсы ясного изложения мыслей...


BlazkowiczА по факту тебе просто нужно удалить объекты из структуры! Просто, ведь, и понятно. И условие у тебя не правильное тоже совсем.
Ведь, если ExportWrapper содержит строку, то значит нужно оставить и всех родителей.
Выходит нужно удалить в дереве те ветки, в которых ни один узел не совпадает со строкой. Так? - Да, все верно!

Я вот поэтому и набросал решение в лоб, с тремя итерациями и кучей ифов, которе еще пилить и тестировать нужно... Но собственно я сюда обратился, может кто подкинет более элегантное решение.

Спасибо!
...
Рейтинг: 0 / 0
Поиск строки в массивах которые вложены друг в друга - красивое решеение?
    #39472922
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.function.Predicate;

public class TreeFilter {

    interface Node {
        String name();
        List<? extends Node> children();
    }

    public class IssuerExportsWrapper implements Node {
        String name = null;
        List<ContactExportsWrapper> allContactExports = new ArrayList<>();
        @Override public String name() {return name;}
        @Override public List<? extends Node> children() {return allContactExports;}
    }

    public class ContactExportsWrapper implements Node {
        String contactName;
        List<ExportWrapper> allExportsForContact = new ArrayList<>();
        @Override public String name() {return contactName;}
        @Override public List<? extends Node> children() {return allExportsForContact;}
    }

    public class ExportWrapper implements Node {
        String filename;
        @Override public String name() {return filename;}
        @Override public List<? extends Node> children() {return Collections.emptyList();}
    }

    public static void main(String[] args) {
        String searchBy = "bu";
        List<IssuerExportsWrapper> exports = new ArrayList<>();
        filter(exports, n -> !searchBy.equalsIgnoreCase(n.name()));
    }

    public static <T extends Node> void filter(List<T> list, Predicate<Node> removeCondition) {
        Iterator<T> iterator = list.iterator();
        while (iterator.hasNext()) {
            T next = iterator.next();
            filter(next.children(), removeCondition);
            if (removeCondition.test(next) && next.children().isEmpty()) {
                iterator.remove();
            }
        }
    }

}
...
Рейтинг: 0 / 0
Поиск строки в массивах которые вложены друг в друга - красивое решеение?
    #39473012
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.function.Predicate;

public class TreeFilter {

    interface Node {
        String name();
        List<? extends Node> children();
    }

    public class IssuerExportsWrapper implements Node {
        String name = null;
        List<ContactExportsWrapper> allContactExports = new ArrayList<>();
        @Override public String name() {return name;}
        @Override public List<? extends Node> children() {return allContactExports;}
    }

    public class ContactExportsWrapper implements Node {
        String contactName;
        List<ExportWrapper> allExportsForContact = new ArrayList<>();
        @Override public String name() {return contactName;}
        @Override public List<? extends Node> children() {return allExportsForContact;}
    }

    public class ExportWrapper implements Node {
        String filename;
        @Override public String name() {return filename;}
        @Override public List<? extends Node> children() {return Collections.emptyList();}
    }

    public static void main(String[] args) {
        String searchBy = "bu";
        List<IssuerExportsWrapper> exports = new ArrayList<>();
        filter(exports, n -> !searchBy.equalsIgnoreCase(n.name()));
    }

    public static <T extends Node> void filter(List<T> list, Predicate<Node> removeCondition) {
        Iterator<T> iterator = list.iterator();
        while (iterator.hasNext()) {
            T next = iterator.next();
            filter(next.children(), removeCondition);
            if (removeCondition.test(next) && next.children().isEmpty()) {
                iterator.remove();
            }
        }
    }

}



Уважаемый, спасибо. Все как часики. Упустил я этот момент с java 8, стыдно. Пошел учисть матчасть.
...
Рейтинг: 0 / 0
Поиск строки в массивах которые вложены друг в друга - красивое решеение?
    #39473021
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_Уважаемый, спасибо. Все как часики. Упустил я этот момент с java 8, стыдно. Пошел учисть матчасть.
Дык, тут из Java 8 только предикат. Можно было его внутрь метода утащить, а передавать саму строку вместо него.
...
Рейтинг: 0 / 0
Поиск строки в массивах которые вложены друг в друга - красивое решеение?
    #39473042
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczДык, тут из Java 8 только предикат. Можно было его внутрь метода утащить, а передавать саму строку вместо него. - но мне нравится как сделано. Вот у меня почему-то как-то немного "плоско" заточено все. Есть цыклы, итерируем по очереди..
Пасиб!
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Поиск строки в массивах которые вложены друг в друга - красивое решеение?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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