Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / поделить Set на равные доли / 13 сообщений из 13, страница 1 из 1
10.09.2021, 17:46
    #40096795
Samantata
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поделить Set на равные доли
дано
Set<String> str =HashSet(); размер любой
int N; может быть нечетное

надо str красиво порезать на N равных сетов, называя их как-нибудь str1. str2. str3
в последнем может быть на 1 стринг больше или меньше.

Как это красиво умные люди делают?
...
Рейтинг: 0 / 0
10.09.2021, 17:50
    #40096798
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поделить Set на равные доли
Слово "массив" слышали?
Что это за странное сочитание слов "называя их как-нибудь str1. str2. str3" ?
...
Рейтинг: 0 / 0
10.09.2021, 18:08
    #40096806
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поделить Set на равные доли
Если по старинке, for'ами, то я бы как-то так бы сделал.


Код: 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.
import java.util.ArrayList;
import java.util.HashSet;

public class Test11 {

    public static void divideSet( HashSet source, ArrayList<HashSet> destArr ) {
        // Кол-во на которое нужно поделить
        int len = destArr.size();
        int i = 0;
        for ( Object o : source ) {
            HashSet dest = destArr.get( i );
            dest.add( o );
            // Переходим на следующий, если закончилось, то начинаем с начала
            i ++;
            if ( i>=len ) {
                i = 0;
            }
        }
    }

    public static void  main( String argv[] ) {
        HashSet<String> ss = new HashSet();
        ArrayList<HashSet> arr= new ArrayList<>();
        int i;
        // Исходные данные
        for ( i = 0; i<98; i++ ) {
            ss.add( Integer.toString(i) );
        }
        // Сеты куда будем делить
        for ( i=0; i<10; i++ ) {
            HashSet<String> tmp = new HashSet();
            arr.add( tmp );
        }
        // Делим
        divideSet( ss, arr );
        // Выводим, что получилось
        for ( HashSet tmp : arr ) {
            System.out.println( "-------" );
            for ( String s : (HashSet<String>)tmp ) {
                System.out.println( s );
            }
        }
        System.out.println( "--- the end ---" );

        return;
    }
}

...
Рейтинг: 0 / 0
10.09.2021, 18:13
    #40096809
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поделить Set на равные доли
Leonid Kudryavtsev
Слово "массив" слышали?
Что это за странное сочитание слов "называя их как-нибудь str1. str2. str3" ?
женская логика ТС же))
...
Рейтинг: 0 / 0
10.09.2021, 18:55
    #40096813
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поделить Set на равные доли
Хм....

Код: java
1.
2.
3.
default Spliterator<E> spliterator()

Creates a Spliterator over the elements in this set. 
...
Рейтинг: 0 / 0
10.09.2021, 19:14
    #40096814
Samantata
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поделить Set на равные доли
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
List<String> arrayList = new ArrayList(mySet);

	         	int countINSet=5;   //размер одного куска сета
			    for (int start = 0; start < arrayList.size(); start += countINSet) {
			        int end = Math.min(start + countINSet , arrayList.size());
			        List<String> sublist = arrayList.subList(start, end);
			        System.out.println(sublist);
			    }


Спасибо всем но я нашла вот такое и себе приспособила. оно работает и очень красивое)))
...
Рейтинг: 0 / 0
10.09.2021, 19:26
    #40096816
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поделить Set на равные доли
Решение не очень красивое. Оно - создает копию по количеству объектов.
Более красивое IMHO - это вернуть 2 Iterator или Iterable.
...
Рейтинг: 0 / 0
10.09.2021, 20:38
    #40096823
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поделить Set на равные доли
mayton,

Спасибо.

Spliterator<E> - я о таком даже и не знал ))) буду знать
...
Рейтинг: 0 / 0
10.09.2021, 22:49
    #40096830
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поделить Set на равные доли
mayton
Решение не очень красивое. Оно - создает копию по количеству объектов.
Более красивое IMHO - это вернуть 2 Iterator или Iterable.
зато копия переданная в поток не изменяется).
Тут надо смотреть что лучше)
...
Рейтинг: 0 / 0
11.09.2021, 12:53
    #40096849
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поделить Set на равные доли
PetroNotC Sharp
mayton
Решение не очень красивое. Оно - создает копию по количеству объектов.
Более красивое IMHO - это вернуть 2 Iterator или Iterable.
зато копия переданная в поток не изменяется).
Тут надо смотреть что лучше)

Ещё как изменяется. Конструктор массива не делает deep-copy.
...
Рейтинг: 0 / 0
11.09.2021, 13:27
    #40096853
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поделить Set на равные доли
mayton,
Если изменяется, то это не deep а shallow
...
Рейтинг: 0 / 0
11.09.2021, 13:34
    #40096855
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поделить Set на равные доли
mayton,
У меня слово копия это не новая ссылка. Это клон.
...
Рейтинг: 0 / 0
11.09.2021, 15:29
    #40096865
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поделить Set на равные доли
Интерфейс Splitterator насколько я поднимаю ввели в восьмерке для поддержки параллельной обработки
стримов. По данной задаче - он наверне не подходит. Размер партишенов на которые он делит будет
наверное сильно отличаться от реализации коллекции.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / поделить Set на равные доли / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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