Как последовательно сохранять точный процент элементов из списка в Java?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как последовательно сохранять точный процент элементов из списка в Java?

Сообщение Anonymous »

В настоящее время я фильтрую список Java, чтобы сохранить примерно процент его элементов, используя случайный подход:

Код: Выделить всё

import java.util.List;
import java.util.Random;

public class Main {
public static void main(String[] args) {
List list = List.of("1", "2", "3", "4", "5", "6", "7", "8", "9", "10");

// Percentage of elements to retain (between 0 and 100)
int percentageToRetain = 30; // Change this value to adjust the percentage

Random random = new Random();
List result = list.stream()
.filter(s -> random.nextInt(100) < percentageToRetain)
.toList();

System.out.println(result);
}
}
Хотя это работает для аппроксимации процента, каждый прогон дает разные результаты, и фактический оставшийся процент может значительно отличаться от моего целевого значения, особенно для небольших списков.
Например: при настройке таргетинга на 30% списка из 10 элементов я могу получить 2 элемента (20%) за один прогон и 4 элемента (40%) за другой.
Мой вопрос:
Как я могу изменить свой код для последовательного сохранения именно указанного процента элементов из списка? В идеале мне хотелось бы решение, которое:
  • Сохраняет точно процентное значение для сохранения процентов элементов (при необходимости округление в меньшую сторону)
  • По-прежнему обеспечивает случайность выбора определенных элементов
  • Эффективно работает как для маленьких, так и для больших списков
Как решить проблему «точной процентной выборки»?

Подробнее здесь: https://stackoverflow.com/questions/796 ... st-in-java
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»