我有一个数字列表
List<Integer> tensOfMinutes = Arrays.asList(10, 20, 30, 40, 50, 60);
我正在尝试确定输入的整数
Integer minutes;
是否在数组中的任意两个成员之间。
示例: 对于输入的 Integer minutes = 23;
,我期望得到答案 20。
在遍历 tensOfMinutes 流时,有什么想法可以实现这一点吗?
我有一个数字列表
List<Integer> tensOfMinutes = Arrays.asList(10, 20, 30, 40, 50, 60);
Integer minutes;
是否在数组中的任意两个成员之间。
示例: 对于输入的 Integer minutes = 23;
,我期望得到答案 20。
在遍历 tensOfMinutes 流时,有什么想法可以实现这一点吗?
List<Integer> l = Arrays.asList(10, 20, 30, 40, 50, 60)
.stream()
.filter( (i) -> i<23 )
.collect(Collectors.toList());
System.out.println( l.get( l.size() - 1 ) );
23
的元素并打印剩余元素中的最后一个。如果使用 Java 9、Scala 和 Haskell 中提供的 dropWhile
函数,将更加简单。请参见:https://docs.oracle.com/javase/9/docs/api/java/util/stream/Stream.html#dropWhile-java.util.function.Predicate-。
Holger 的改进版本
Stream<Integer> stream = Arrays.asList(10, 20, 30, 40, 50, 60).stream();
stream.filter( i -> i<23 )
.reduce( (a,b) -> b )
.ifPresent(System.out::println);
(a,b) -> b
lambda 表达式被用来获取最后一个元素,ifPresent
方法被用来确保它不会出错。l.stream().filter(i -> i<23).reduce((a,b) -> b).ifPresent(System.out::println);
如果元素没有预先排序,请使用 .reduce(Math::max)
替代 .reduce((a,b) -> b)
... 顺便说一句,我不明白 dropWhile
如何使任何事情变得更容易。 - Holger列表 list = IntStream.of(10, 20, 6, 7, 81).boxed().collect(Collectors.toList());
int previous=0
for(Integer number : tensOfMinutes)
if(number<=numberToFind)
previous=number;
您需要循环遍历所有数字,并记住最后一个小于或等于您在变量previous
中搜索的数字。这需要列表按升序排序。我不知道整数类的确切规格,但这是一种方法。