简体   繁体   中英

Stream different data types

I'm getting my head around Streams API.

What is happening with the 2 in the first line? What data type is it treated as? Why doesn't this print true ?

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

The second part of this question is why doesn't the below code compile ( 2 is not in quotes )?

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

In the first snippet, you are creating a Stream of Object s. The 2 element is an Integer , so comparing it to the String "2" returns false.

In the second snippet, you can't compare an arbitrary Object to the int 2, since there is no conversion from Object to 2 .

For the first snippet to return true, you have to change the last element of the Stream to a String (and also use equals instead of == in order not to rely on the String pool):

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

The second snippet can be fixed by using equals instead of == , since equals exists for any Object :

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

You should instead make use of:

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

The reason for that is the comparison within the anyMatch you're doing is for i which is an Object (from the stream) and is incompatible with an int .

Also, note that the first part compiles successfully since you are comparing an integer(object) with an object string "2" in there and hence returns false.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM