0 / 0 / 0
Регистрация: 24.05.2015
Сообщений: 81
1

Получить рандомное количество записей из хешмапы

07.04.2020, 19:49. Показов 1033. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть хешмапа, в которой лежит 100 элементов (условно). Как я могу получить 10 случайных ключей из этой мапы и вывести их в виде одной строки?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2020, 19:49
Ответы с готовыми решениями:

Не удаётся получить элемент хешмапы по ключу
import java.io.*; import java.nio.charset.StandardCharsets; import java.util.HashMap; public...

Получить количество записей в таблице
Здравствуйте, делаю добавление в бд. Мне нужно получить количество записей в таблице и затем...

Как получить количество записей в запросе?
Здравствуйте! Как в запросе SELECT Таблица1.* FROM Таблица1; получить количество записей?...

Получить количество записей в запросе PDO
Приветствую WEB-разработчиков! Происходит ошибка, на функцию fetchColumn(), вот ее текст: ...

14
364 / 251 / 113
Регистрация: 07.10.2017
Сообщений: 1,330
07.04.2020, 20:09 2
Сделать лист ключей, рандомить число от 0 до 99, брать из листа ключ и выводить значение мапы
0
0 / 0 / 0
Регистрация: 24.05.2015
Сообщений: 81
07.04.2020, 21:45  [ТС] 3
Мне нужно выводить не значение, а сам ключ.
И "дубликаты" не нужны. Если я загоню всё это дело в цикл на 10 проходов, то есть вероятность что "генератор рандомных чисел" выдаст мне два раза одинаковое значение, соответственно ключ будет повторяться. Перед этим ещё загонять сгенерированные числа в условный HashSet (для избежания дубликатов)?

Добавлено через 1 час 18 минут
Если кому-то понадобится решение в будущем для похожей задачи:
Java
1
2
3
4
List<String> keys = new ArrayList<>(map.keySet());
Collections.shuffle(keys);
List<String> randomKeys = keys.subList(0, 10);
return String.join("\n", randomKeys);
0
2442 / 1898 / 475
Регистрация: 17.02.2014
Сообщений: 9,155
08.04.2020, 14:24 4
Цитата Сообщение от hsad Посмотреть сообщение
в условный HashSet
зато не нужно получать все ключи)).
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static void main(String[] args) {
        Map<Integer,Integer> integerIntegerMap = new HashMap<>();
        for (int i = 0; i < 102; i++) {
            integerIntegerMap.put(i,i);
        }
        //System.out.println(integerIntegerMap);
        Set<Integer> takenSetKey = new HashSet<>();
        Random rndGen = new Random(System.currentTimeMillis());
        int rndKey;
        while (takenSetKey.size() != 10){
            rndKey = rndGen.nextInt(integerIntegerMap.size());
            if (!takenSetKey.contains(rndKey)){
                takenSetKey.add(rndKey);
                System.out.print(integerIntegerMap.get(rndKey) + ",");
            }
        }
        takenSetKey.clear();
    }

а так вместо условного сета, необходимого объема, ты получаешь не менее условный лист, но в 10 раз! больший((
0
Эксперт Java
4450 / 2683 / 482
Регистрация: 28.04.2012
Сообщений: 8,539
08.04.2020, 14:43 5
Aviz__, какое отношение то что ты написал имеет к вопросу ТС?

Замени Integer на String в своём, кхм, коде.
0
Aviz__
08.04.2020, 17:29
  #6

Не по теме:

Цитата Сообщение от korvin_ Посмотреть сообщение
какое отношение то что ты написал имеет к вопросу ТС?
ну, братец, раньше ты лучше соображал((

0
Эксперт Java
4450 / 2683 / 482
Регистрация: 28.04.2012
Сообщений: 8,539
08.04.2020, 17:59 7
Цитата Сообщение от Aviz__ Посмотреть сообщение
ну, братец, раньше ты лучше соображал
Ты, видимо, вообще перестал. Повторю: есть Map<String, Object> map, выбери 100 рандомных ключей из неё своим кодом.
0
2442 / 1898 / 475
Регистрация: 17.02.2014
Сообщений: 9,155
08.04.2020, 18:33 8
Цитата Сообщение от korvin_ Посмотреть сообщение
вообще перестал.
ога, несомненно))
0
1021 / 561 / 185
Регистрация: 18.08.2013
Сообщений: 2,026
Записей в блоге: 2
08.04.2020, 18:43 9
На работе приходится использовать седьмой JDK, ох как же я соскучился по стримам и лямбдам
Java
1
2
        String result = map.keySet().stream().sorted((a, b) -> ThreadLocalRandom.current().nextInt())
                .limit(10).collect(Collectors.joining("\n"));
1
2442 / 1898 / 475
Регистрация: 17.02.2014
Сообщений: 9,155
08.04.2020, 19:33 10
korvin_, на, учись))
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
 
public class Helper {
 
    public static void main(String[] args) {
        Set<String> setStr = getStrSet(100); // спецаально для korvin_, это ключи из мапы
        Set<String> takenStr = new HashSet<>();
        Random rndGen = new Random(System.currentTimeMillis());
        for (String anElem : setStr) {
            if ((rndGen.nextInt(10000) + 1) % 13 == 0)
                takenStr.add(anElem);
        }
        System.out.println(takenStr);
    }
 
    static Set<String> getStrSet(int n) {
        Set<String> stringSet = new HashSet<>();
        while (n-- > 0) stringSet.add("" + (n + 1));
        return stringSet;
    }
}
0
Эксперт Java
4450 / 2683 / 482
Регистрация: 28.04.2012
Сообщений: 8,539
08.04.2020, 19:51 11
Aviz__,

1) (rndGen.nextInt(10000) + 1) % 13 == 0 — почему 10000? Почему 13? Что за магически-числовая наркомания?
2) где контроль количества? Нужно не больше 10 элементов выбрать.
3) ничего, что этот код вообще не тот, который я комментировал? переобуваешься находу?

И по-мелочи:
1) new Random(System.currentTimeMillis()); — зачем исплользовать конструктор c явным seed?
2) почему не ThreadLocalRandom?
1
2442 / 1898 / 475
Регистрация: 17.02.2014
Сообщений: 9,155
08.04.2020, 20:30 12
Цитата Сообщение от korvin_ Посмотреть сообщение
где контроль количества?
пфф(( может сам додумаешь, как-то стыдно тебе показывать такую элементарщину, братец!
0
Эксперт Java
4450 / 2683 / 482
Регистрация: 28.04.2012
Сообщений: 8,539
08.04.2020, 20:41 13
Цитата Сообщение от Aviz__ Посмотреть сообщение
может сам додумаешь, как-то стыдно тебе показывать такую элементарщину, братец!
Как-то стыдно не написать такую элементарщину в простеньком коде.
0
2442 / 1898 / 475
Регистрация: 17.02.2014
Сообщений: 9,155
09.04.2020, 07:16 14

Не по теме:

Цитата Сообщение от korvin_ Посмотреть сообщение
Как-то стыдно
ога) рад, что дошло! сильно не переживай, все стареют...

0
Goongala
09.04.2020, 07:36     Получить рандомное количество записей из хешмапы
  #15
 Комментарий модератора 
Заканчивайте оффтоп
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2020, 07:36

Получить количество записей в таблице SQLite
В процессе создания приложения возникла огромная куча вопросов по работе с БД в Lazarus. Вот...

Получить количество записей при отборе в DataGridView
Доброго всем дня. Есть код: Public Class Form4 Private Sub Form4_Load(sender As Object, e...

выбрать из таблицы рандомное число записей не меньше N и не больше M
Нужно выбрать из таблицы рандомное число записей не меньше N и не больше M... нашел вот что:...

Получить уникальные значения поля и количество записей с этим же значением
Здравствуйте, есть таблица с данными следующего вида: |id | type | ..... |1 | 7 | ...... |6 |...

Как правильней получить количество записей в таблице в базе через FibPlus
Здравствуйте. Имеется таблица с десятками тыс записей. Мне нужно узнать сколько записей...

Подскажите как получить количество записей(минимальное) сумма значений которых=80% от всей суммы
Задача в следующем: есть числовое поле с определенным количеством записей. Необходимо получить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru