swift集合提供了很多遍历的函数用来对元素进行访问及 *** 作,并大量应用了闭包。
重点需要了解的函数有:
forEach、filter、map、reduce
forEach:循环遍历集合中的元素,相当于for-in 快速遍历
let values = [5, 3, 2, 3,1]
valuesforEach {
print("element is ($0)")
}
filter:/
函数原型:
func filter(_ isIncluded: (Element) -> Bool) -> [Element]
按照规则过滤原数组
/
var values = [15, 10, 488, 32, 8]
let res = valuesfilter {
return $0 > 4
}
//res 是values数组里 所有大于4 的元素组成的新数组
map:/
函数原型:
studentsmap(<#T##transform: (String) throws -> T##(String) throws -> T#>)
数组映射
/
let input = ["0", "12", "name", "hi", "3"]
let number = inputmap {
Int($0) //将元素转换为Int型
}
//注意类型转换可能失败,所以返回的是可选型
//[Optional(0), Optional(12), nil, nil, Optional(3)]
/
另外一个高度近似的函数
flatMap
隐含了两种 *** 作
1解包
2展开并合并
/
let flatNumber = inputflatMap() {
Int($0)
}
//[0, 12, 3]
reduce:
let numbers = [1, 2, 3, 4]
let numberSum = numbersreduce(0, { x, y in
x + y
})
// numberSum == 10
JDK5
自动装箱与拆箱:
枚举
静态导入,如:import staticjavalangSystemout
可变参数(Varargs)
内省(Introspector),主要用于 *** 作JavaBean中的属性,通过getXxx/setXxx。一般的做法是通过类Introspector来获取某个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器(PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后我们就可以通过反射机制来调用这些方法。
泛型(Generic)(包括通配类型/边界类型等)
For-Each循环
注解
协变返回类型:实际返回类型可以是要求的返回类型的一个子类型
JDK6
1AWT新增加了两个类:Desktop和SystemTray,其中前者用来通过系统默认程序来执行一个 *** 作,如使用默认浏览器浏览指定的URL,用默认邮件客户端给指定的邮箱发邮件,用默认应用程序打开或编辑文件(比如,用记事本打开以txt为后缀名的文件),用系统默认的打印机打印文档等。后者可以用来在系统托盘区创建一个托盘程序。(开发中基本没用过)
2使用JAXB2来实现对象与XML之间的映射,可以将一个Java对象转变成为XML格式,反之亦然
3StAX,一种利用拉模式解析(pull-parsing)XML文档的API。类似于SAX,也基于事件驱动模型。之所以将StAX加入到JAXP家族,是因为JDK6中的JAXB2和JAX-WS 20中都会用StAX。
4使用Compiler API,动态编译Java源文件,如JSP编译引擎就是动态的,所以修改后无需重启服务器。(刚知道是从这里开始可以动态编译的)
5轻量级>
JDK7
1对Java集合(Collections)的增强支持,可直接采用[]、{}的形式存入对象,采用[]的形式按照索引、键值来获取集合中的对象。如:
List<String>list=[“item1”,”item2”];//存
Stringitem=list[0];//直接取
Set<String>set={“item1”,”item2”,”item3”};//存
Map<String,Integer> map={“key1”:1,”key2”:2};//存
Intvalue=map[“key1”];//取12345
2在Switch中可用String
3数值可加下划线用作分隔符(编译时自动被忽略)
4支持二进制数字,如:int binary= 0b1001_1001;
5简化了可变参数方法的调用
6调用泛型类的构造方法时,可以省去泛型参数,编译器会自动判断。
7Boolean类型反转,空指针安全,参与位运算
8char类型的equals方法: booleanCharacterequalsIgnoreCase(char ch1, char ch2)
9安全的加减乘除: MathsafeToInt(longv); MathsafeNegate(int v); MathsafeSubtract(long v1, int v2);MathsafeMultiply(int v1, int v2)……
10 Map集合支持并发请求,注HashTable是线程安全的,Map是非线程安全的。但此处更新使得其也支持并发。另外,Map对象可这样定义:Map map = {name:”xxx”,age:18};
JDK8
1接口的默认方法:即接口中可以声明一个非抽象的方法做为默认的实现,但只能声明一个,且在方法的返回类型前要加上“default”关键字。
2Lambda 表达式:是对匿名比较器的简化,如:
Collectionssort(names,(String a, String b) -> { returnbcompareTo(a);});1
对于函数体只有一行代码的,你可以去掉大括号{}以及return关键字。如:1
Collectionssort(names,(String a, String b) -> bcompareTo(a));
或:Collectionssort(names, (a, b) -> bcompareTo(a));123
3函数式接口:是指仅仅只包含一个抽象方法的接口,要加@FunctionalInterface注解
4使用 :: 关键字来传递方法或者构造函数引用
5多重注解
6还增加了很多与函数式接口类似的接口以及与Map相关的API等……
JDK9
jdk19新特性
1、Java 平台级模块系统
当启动一个模块化应用时, JVM 会验证是否所有的模块都能使用,这基于 requires 语句——比脆弱的类路径迈进了一大步。模块允许你更好地强制结构化封装你的应用并明确依赖。
2 Linking
当你使用具有显式依赖关系的模块和模块化的 JDK 时,新的可能性出现了。你的应用程序模块现在将声明其对其他应用程序模块的依赖以及对其所使用的 JDK 模块的依赖。为什么不使用这些信息创建一个最小的运行时环境,其中只包含运行应用程序所需的那些模块呢? 这可以通过 Java 9 中的新的 jlink 工具实现。你可以创建针对应用程序进行优化的最小运行时映像而不需要使用完全加载 JDK 安装版本。
3JShell : 交互式 Java REPL
许多语言已经具有交互式编程环境,Java 现在加入了这个俱乐部。您可以从控制台启动 jshell ,并直接启动输入和执行 Java 代码。 jshell 的即时反馈使它成为探索 API 和尝试语言特性的好工具。
4改进的 Javadoc
Javadoc 现在支持在 API 文档中的进行搜索。另外,Javadoc 的输出现在符合兼容 HTML5 标准。此外,你会注意到,每个 Javadoc 页面都包含有关 JDK 模块类或接口来源的信息。
5集合工厂方法
通常,您希望在代码中创建一个集合(例如,List 或 Set ),并直接用一些元素填充它。 实例化集合,几个 “add” 调用,使得代码重复。 Java 9,添加了几种集合工厂方法:
Set<Integer> ints = Setof(1,2,3);List<String> strings = Listof("first","second");123
除了更短和更好阅读之外,这些方法也可以避免您选择特定的集合实现。 事实上,从工厂方法返回已放入数个元素的集合实现是高度优化的。这是可能的,因为它们是不可变的:在创建后,继续添加元素到这些集合会导致 “UnsupportedOperationException” 。
6改进的 Stream API
长期以来,Stream API 都是 Java 标准库最好的改进之一。通过这套 API 可以在集合上建立用于转换的申明管道。在 Java 9 中它会变得更好。Stream 接口中添加了 4 个新的方法:dropWhile, takeWhile, ofNullable。还有个 iterate 方法的新重载方法,可以让你提供一个 Predicate (判断条件)来指定什么时候结束迭代:
IntStreamiterate(1, i -> i < 100, i -> i + 1)forEach(Systemout::println);1
第二个参数是一个 Lambda,它会在当前 IntStream 中的元素到达 100 的时候返回 true。因此这个简单的示例是向控制台打印 1 到 99。
除了对 Stream 本身的扩展,Optional 和 Stream 之间的结合也得到了改进。现在可以通过 Optional 的新方法 stram 将一个 Optional 对象转换为一个(可能是空的) Stream 对象:
Stream<Integer> s = Optionalof(1)stream();1
在组合复杂的 Stream 管道时,将 Optional 转换为 Stream 非常有用。
7私有接口方法
使用 Java 9,您可以向接口添加私有辅助方法来解决此问题:
publicinterface MyInterface {
voidnormalInterfaceMethod();
default void interfaceMethodWithDefault() { init(); }
default void anotherDefaultMethod() { init(); }This method is not part of the public API exposed by MyInterface
privatevoidinit() { Systemoutprintln("Initializing");
}}12345678910111213
如果您使用默认方法开发 API ,那么私有接口方法可能有助于构建其实现。
8 >
Java 9 中有新的方式来处理 >
>
除了这个简单的请求/响应模型之外,>
9多版本兼容 JAR
我们最后要来着重介绍的这个特性对于库的维护者而言是个特别好的消息。当一个新版本的 Java 出现的时候,你的库用户要花费数年时间才会切换到这个新的版本。这就意味着库得去向后兼容你想要支持的最老的 Java 版本 (许多情况下就是 Java 6 或者 7)。这实际上意味着未来的很长一段时间,你都不能在库中运用 Java 9 所提供的新特性。幸运的是,多版本兼容 JAR 功能能让你创建仅在特定版本的 Java 环境中运行库程序时选择使用的 class 版本:
multireleasejar
├──
META-INF
│
└── versions
│
└── 9
│
└── multirelease
│
└── Helperclass
├──
multirelease
├──1
Helperclass
└──1
Mainclass
在上述场景中, multireleasejar 可以在 Java 9 中使用, 不过 Helper 这个类使用的不是顶层的 multireleaseHelper 这个 class, 而是处在“META-INF/versions/9”下面的这个。这是特别为 Java 9 准备的 class 版本,可以运用 Java 9 所提供的特性和库。同时,在早期的 Java 诸版本中使用这个 JAR 也是能运行的,因为较老版本的 Java 只会看到顶层的这个 Helper 类。
以上就是关于OpenFlow交换机规范1.3.0(一)全部的内容,包括:OpenFlow交换机规范1.3.0(一)、在Magento 中如何使用集合查询条件、swift 遍历方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)