流式传输不同的数据类型

时间:2017-08-21 07:28:20

标签: java java-8 java-stream

我正在了解Streams API。

第一行的 2 发生了什么?它被视为什么数据类型?为什么不打印 true

System.out.println(Stream.of("hi", "there",2).anyMatch(i->i=="2"));

这个问题的第二部分是为什么下面的代码不能编译( 2不在引号中)?

System.out.println(Stream.of("hi", "there",2).anyMatch(i->i==2));

2 个答案:

答案 0 :(得分:7)

在第一个代码段中,您正在创建Stream Object个。 2元素是Integer,因此将其与String“2”进行比较会返回false。

在第二个代码段中,您无法将任意对象与int 2进行比较,因为无法从Object转换为2

要使第一个片段返回true,您必须将流的最后一个元素更改为String(并使用equals而不是==,以便不依赖String池):

System.out.println(Stream.of("hi", "there", "2").anyMatch(i->i.equals("2")));

可以使用equals代替==修复第二个代码段,因为任何equals都存在Object

System.out.println(Stream.of("hi", "there",2).anyMatch(i->i.equals(2)));

答案 1 :(得分:3)

您应该使用:

System.out.println(Stream.of("hi", "there",2).anyMatch(i->i.equals(2)));

原因是anyMatch您所做的i内的比较是Objectint(来自流)并且与{{"2"不兼容1}}。

另外,请注意第一部分成功编译,因为您将整数(对象)与对象字符串--function A BEGIN TRANSACTION UPDATE TABLE tbl SET A = A, B = B WHERE ID = @id --logic SELECT @a = A FROM tbl WHERE WHERE ID = @id IF @a = 'True' UPDATE tbl SET B = 'False' WHERE ID = @id --logic end COMMIT TRANSACTION --function B BEGIN TRANSACTION UPDATE TABLE tbl SET A = A, B = B WHERE ID = @id --logic SELECT @b = B FROM tbl WHERE WHERE ID = @id IF @B = 'True' UPDATE tbl SET A = 'False' WHERE ID = @id --logic end COMMIT TRANSACTION 进行比较,因此返回false。