我有一个数字列表
List<Integer> tensOfMinutes = Arrays.asList(10, 20, 30, 40, 50, 60);
我试图确定输入int Integer minutes;
是否在上面数组的任何两个成员之间。
Integer minutes = 23;
的示例我希望 20 作为答案。
有关如何在迭代 tensOfMinutes 流时实现此目的的任何想法?
答案 0 :(得分:5)
你可以这样做:
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
函数会更容易:
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
方法用于确保其安全性。
答案 1 :(得分:0)
List list=IntStream.of(10,20,6,7,81).boxed().collect(Collectors.toList());
答案 2 :(得分:-2)
你需要第一个较大数字之前的数字,所以试试这个:
int previous=0
for(Integer number : tensOfMinutes)
if(number<=numberToFind)
previous=number;
您将遍历所有数字并记住最后一个数字,该数字小于或等于您在变量previous
中搜索的数字。这要求列表按升序排序。我不知道整数类的确切规格,但这是方法