Stream API提供了许多内置功能, 以帮助使用流管道对集合执行操作。该API是声明式编程 ,可使代码更加精确且不易出错。在Java 9中,很少有有用的方法添加到Stream API中。
Stream.iterate():此方法可用作传统for循环的流版本替换。
Stream.takeWhile():此方法可以在while循环中使用,该循环在满足条件时会取值 。
Stream.dropWhile():此方法可以在while循环中使用,该循环在满足条件时会丢弃值 。
在下面的例子中,我们可以实现静态方法: 迭代() takeWhile()
,和dropWhile()方法的流API。
import java.util.Arrays; import java.util.Iterator; import java.util.stream.Collectors; import java.util.stream.Stream; public class StreamAPITest { public static void main(String args[]) { String[] sortedNames = {"Adithya", "Bharath", "Charan", "Dinesh", "Raja", "Ravi", "Zaheer"}; System.out.println("[Traditional for loop] Indexes of names starting with R = "); for(int i = 0; i < sortedNames.length; i++) { if(sortedNames[i].startsWith("R")) { System.out.println(i); } } System.out.println("[Stream.iterate] Indexes of names starting with R = "); Stream.iterate(0, i -> i < sortedNames.length, i -> ++i).filter(i -> sortedNames[i].startsWith("R")).forEach(System.out::println); String namesAtoC = Arrays.stream(sortedNames).takeWhile(n -> n.charAt(0) <= 'C') .collect(Collectors.joining(",")); String namesDtoZ = Arrays.stream(sortedNames).dropWhile(n -> n.charAt(0) <= 'C') .collect(Collectors.joining(",")); System.out.println("Names A to C = " + namesAtoC); System.out.println("Names D to Z = " + namesDtoZ); } }
输出结果
[Traditional for loop] Indexes of names starting with R = 4 5 [Stream.iterate] Indexes of names starting with R = 4 5 Names A to C = Adithya,Bharath,Charan Names D to Z = Dinesh,Raja,Ravi,Zaheer
本文向大家介绍我们如何在Java中实现自定义HashSet?,包括了我们如何在Java中实现自定义HashSet?的使用技巧和注意事项,需要的朋友参考一下 HashSet实现了不允许重复值的Set接口。HashSet不是同步的,也不是线程安全的。当我们可以向HashSet添加任何重复元素时,add()方法返回false,并且不允许向HashSet添加重复元素。 语法 在下面的示例中,我们可以实现自
问题内容: 我们通过将一个表的PK(作为FK)添加到 另一表来实现一对多关系。我们通过 在第三个表中添加2个表的PK来实现多对多关系。 我们如何实现IS-A关系? 实体分别是技术人员和行政人员。我 可以在表EMPLOYEE中使用一个额外的字段(id,名称,姓氏, 角色…AdminFields…,…TechFields…) 但我想探索IS-A选项。 编辑:我按照Donnie的建议做了,但没有角色字段
本文向大家介绍我们是否必须在实现Java接口的类中实现所有方法?,包括了我们是否必须在实现Java接口的类中实现所有方法?的使用技巧和注意事项,需要的朋友参考一下 是的,必须在实现接口的类中实现所有方法,直到并且除非该类被声明为抽象类。 只有两个选择- 实现接口定义的每个方法。 将该类声明为抽象类,结果迫使您在创建任何对象之前先对该类进行子类化(并实现缺少的方法)。 类不需要在接口中实现所有方法的
问题内容: 我想在Java Web服务类中实现方法重载,如下所示: 如果将单个对象转发到,则它应触发第一个方法,如果发送s 数组,则应触发第二个方法。 在WSDL文件中,它仅显示一种方法。但是,如果我尝试同时调用这两个调用,则无法生成WSDL文件。 问题答案: 操作重载是 不是 允许网络服务。WS- BP中 明确禁止使用它,并且WSDL 1.2也不允许这样做。 即使您找到了对此有一些支持的堆栈,我
有没有办法过滤掉所有大于最大值的值,这些值可以存储在使用StreamAPI的Long中?目前的情况是,您可以在前端使用简单的搜索条搜索某些客户,通过使用他们的ID。例如:如果您在这两个ID之间放置一个“隔离器”,一切都正常。但是如果您忘记了“隔离器”,我的代码试图将解析为Long,我想这就是问题所在。这会在尝试搜索后导致一个数字格式异常。有没有办法过滤掉这些因为太大而无法解析为Long的数字? 谢
我一直在使用来自https://apimeister.com/2015/06/27/add-jar-to-the-classpath-at-runtime-in-jjs.html在java的nashorn jjs中运行时加载类。 它在java 8中工作,但在java 9中不工作。我知道https://stackoverflow.com/a/41265267/5891192中提到的推荐命令行解决方案