Нет результата при фильтрации случайного IntStream в JavaJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Нет результата при фильтрации случайного IntStream в Java

Сообщение Anonymous »

Я представляю коллекцию черепах, у каждой из которых есть момент вылупления. Я хочу случайным образом выбрать любую взрослую черепаху.
В этом симуляторе аквариума я притворяюсь, что минуты — это годы.
record Turtle(
String name ,
Instant hatched ,
Duration lifespan
)
{
static final Duration MATURITY = Duration.ofMinutes ( 4 );

Duration age ( ) { return Duration.between ( this.hatched , Instant.now ( ) ); }
}

Я использую ThreadLocalRandom для генерации IntStream случайных целых чисел. Я использую эти целые числа в качестве индекса в моем списке объектов List Turtle. Я проверяю возраст этой черепахи, чтобы увидеть, не превышает ли он предопределенную продолжительность ЗРЕЛОСТИ. Если не созрели, пусть поток продолжается.
Конечно, ни одна черепаха еще не может стать зрелой. Поэтому я определил тип возвращаемого значения как Необязательный < Черепаха >, чтобы он был пустым, если черепаха не найдена.
Проблема в том, что мой поток, похоже, терпит неудачу, а результат так и не возвращается. Почему?
public class Aquarium
{
public static void main ( String[] args )
{
System.out.println ( "INFO Demo start. " + Instant.now ( ) );

List < Turtle > turtles =
List.of (
new Turtle ( "Alice" , Instant.now ( ).truncatedTo ( ChronoUnit.MINUTES ).minus ( Duration.ofMinutes ( 3 ) ) , Duration.ofMinutes ( 17 ) ) ,
new Turtle ( "Bob" , Instant.now ( ).truncatedTo ( ChronoUnit.MINUTES ).minus ( Duration.ofMinutes ( 2 ) ) , Duration.ofMinutes ( 16 ) ) ,
new Turtle ( "Carol" , Instant.now ( ).truncatedTo ( ChronoUnit.MINUTES ).minus ( Duration.ofMinutes ( 1 ) ) , Duration.ofMinutes ( 18 ) ) ,
new Turtle ( "Davis" , Instant.now ( ).truncatedTo ( ChronoUnit.MINUTES ).minus ( Duration.ofMinutes ( 2 ) ) , Duration.ofMinutes ( 22 ) )
);
System.out.println ( "turtles = " + turtles );
Optional < Turtle > anArbitraryMatureTurtle =
ThreadLocalRandom
.current ( )
.ints ( 0 , turtles.size ( ) )
.filter (
( int randomIndex ) -> turtles.get ( randomIndex ).age ( ).compareTo ( Turtle.MATURITY ) > 0
)
.mapToObj ( turtles :: get )
.findAny ( );
System.out.println ( "anArbitraryMatureTurtle = " + anArbitraryMatureTurtle );

try { Thread.sleep ( Duration.ofMinutes ( 30 ) ); } catch ( InterruptedException e ) { throw new RuntimeException ( e ); } // Let the aquarium run a while.
System.out.println ( "INFO Demo end. " + Instant.now ( ) );
}
}


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

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

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

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

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

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