Using Streams with primitives data types and corresponding wrappers
While playing around with Java8's Streams-API, I stumbled over the following:
To convert an array of primitive wrapper classe objects into a Stream
I just have to call Stream.of(array)
. But to convert an array of primitive data types, I have to call .of(array)
from the corresponding wrapper (class) stream class (<-- that sounds silly).
An example:
final Integer integers = {1, 2, 3};
final int ints = {1, 2, 3};
Stream.of(integers).forEach(System.out::println); //That works just fine
Stream.of(ints).forEach(System.out::println); //That doesn't
IntStream.of(ints).forEach(System.out::println); //Have to use IntStream instead
My question(s):
Why is this? Does this correlate to e.g. the behaviour of Arrays.asList()
which also just works for wrapper class arrays?
java wrapper java-8 primitive-types java-stream
add a comment |
While playing around with Java8's Streams-API, I stumbled over the following:
To convert an array of primitive wrapper classe objects into a Stream
I just have to call Stream.of(array)
. But to convert an array of primitive data types, I have to call .of(array)
from the corresponding wrapper (class) stream class (<-- that sounds silly).
An example:
final Integer integers = {1, 2, 3};
final int ints = {1, 2, 3};
Stream.of(integers).forEach(System.out::println); //That works just fine
Stream.of(ints).forEach(System.out::println); //That doesn't
IntStream.of(ints).forEach(System.out::println); //Have to use IntStream instead
My question(s):
Why is this? Does this correlate to e.g. the behaviour of Arrays.asList()
which also just works for wrapper class arrays?
java wrapper java-8 primitive-types java-stream
4
Isn't it normal to use IntStream methods to deal with IntStreams, and Stream methods to deal with Streams?
– JB Nizet
Apr 11 '14 at 8:35
4
You can also useArrays.stream(ints).forEach(System.out::println)
.
– skiwi
Apr 11 '14 at 8:52
@skiwi That is really nice to know. Thanks
– ifloop
Apr 11 '14 at 8:59
1
Related to (but not a direct duplicate of) stackoverflow.com/q/14850879/2886891
– Honza Zidek
Feb 7 '18 at 22:18
add a comment |
While playing around with Java8's Streams-API, I stumbled over the following:
To convert an array of primitive wrapper classe objects into a Stream
I just have to call Stream.of(array)
. But to convert an array of primitive data types, I have to call .of(array)
from the corresponding wrapper (class) stream class (<-- that sounds silly).
An example:
final Integer integers = {1, 2, 3};
final int ints = {1, 2, 3};
Stream.of(integers).forEach(System.out::println); //That works just fine
Stream.of(ints).forEach(System.out::println); //That doesn't
IntStream.of(ints).forEach(System.out::println); //Have to use IntStream instead
My question(s):
Why is this? Does this correlate to e.g. the behaviour of Arrays.asList()
which also just works for wrapper class arrays?
java wrapper java-8 primitive-types java-stream
While playing around with Java8's Streams-API, I stumbled over the following:
To convert an array of primitive wrapper classe objects into a Stream
I just have to call Stream.of(array)
. But to convert an array of primitive data types, I have to call .of(array)
from the corresponding wrapper (class) stream class (<-- that sounds silly).
An example:
final Integer integers = {1, 2, 3};
final int ints = {1, 2, 3};
Stream.of(integers).forEach(System.out::println); //That works just fine
Stream.of(ints).forEach(System.out::println); //That doesn't
IntStream.of(ints).forEach(System.out::println); //Have to use IntStream instead
My question(s):
Why is this? Does this correlate to e.g. the behaviour of Arrays.asList()
which also just works for wrapper class arrays?
java wrapper java-8 primitive-types java-stream
java wrapper java-8 primitive-types java-stream
edited Jul 29 '14 at 6:42


Stuart Marks
81.5k26137208
81.5k26137208
asked Apr 11 '14 at 8:31


ifloopifloop
5,14111835
5,14111835
4
Isn't it normal to use IntStream methods to deal with IntStreams, and Stream methods to deal with Streams?
– JB Nizet
Apr 11 '14 at 8:35
4
You can also useArrays.stream(ints).forEach(System.out::println)
.
– skiwi
Apr 11 '14 at 8:52
@skiwi That is really nice to know. Thanks
– ifloop
Apr 11 '14 at 8:59
1
Related to (but not a direct duplicate of) stackoverflow.com/q/14850879/2886891
– Honza Zidek
Feb 7 '18 at 22:18
add a comment |
4
Isn't it normal to use IntStream methods to deal with IntStreams, and Stream methods to deal with Streams?
– JB Nizet
Apr 11 '14 at 8:35
4
You can also useArrays.stream(ints).forEach(System.out::println)
.
– skiwi
Apr 11 '14 at 8:52
@skiwi That is really nice to know. Thanks
– ifloop
Apr 11 '14 at 8:59
1
Related to (but not a direct duplicate of) stackoverflow.com/q/14850879/2886891
– Honza Zidek
Feb 7 '18 at 22:18
4
4
Isn't it normal to use IntStream methods to deal with IntStreams, and Stream methods to deal with Streams?
– JB Nizet
Apr 11 '14 at 8:35
Isn't it normal to use IntStream methods to deal with IntStreams, and Stream methods to deal with Streams?
– JB Nizet
Apr 11 '14 at 8:35
4
4
You can also use
Arrays.stream(ints).forEach(System.out::println)
.– skiwi
Apr 11 '14 at 8:52
You can also use
Arrays.stream(ints).forEach(System.out::println)
.– skiwi
Apr 11 '14 at 8:52
@skiwi That is really nice to know. Thanks
– ifloop
Apr 11 '14 at 8:59
@skiwi That is really nice to know. Thanks
– ifloop
Apr 11 '14 at 8:59
1
1
Related to (but not a direct duplicate of) stackoverflow.com/q/14850879/2886891
– Honza Zidek
Feb 7 '18 at 22:18
Related to (but not a direct duplicate of) stackoverflow.com/q/14850879/2886891
– Honza Zidek
Feb 7 '18 at 22:18
add a comment |
1 Answer
1
active
oldest
votes
Java 8 stream framework has a generic Stream<T>
for objects as elements, and three primitive streams IntStream
, LongStream
, DoubleStream
for the main three primitives. If you work with primitives, use one of those latter, in your case IntStream
.
See the picture:
What lies behind is that:
Java generics cannot work with primitive types: it is possible to have only
List<Integer>
andStream<Integer>
, but notandList<int>
Stream<int>
When the Java Collections framework was introduced, it was introduced only for classes, so if you want to have a
List
ofint
s, you have to wrap them toInteger
s. This is costly!When the Java Streams framework was introduced, they decided to get around this overhead and in parallel with the "class-oriented" streams (using the generics mechanism), they introduced three extra sets of all the library functions, specifically designed for the most important primitive types:
int
,long
,double
.
And see also a marvelous explanation here: https://stackoverflow.com/a/22919112/2886891
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f23007422%2fusing-streams-with-primitives-data-types-and-corresponding-wrappers%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Java 8 stream framework has a generic Stream<T>
for objects as elements, and three primitive streams IntStream
, LongStream
, DoubleStream
for the main three primitives. If you work with primitives, use one of those latter, in your case IntStream
.
See the picture:
What lies behind is that:
Java generics cannot work with primitive types: it is possible to have only
List<Integer>
andStream<Integer>
, but notandList<int>
Stream<int>
When the Java Collections framework was introduced, it was introduced only for classes, so if you want to have a
List
ofint
s, you have to wrap them toInteger
s. This is costly!When the Java Streams framework was introduced, they decided to get around this overhead and in parallel with the "class-oriented" streams (using the generics mechanism), they introduced three extra sets of all the library functions, specifically designed for the most important primitive types:
int
,long
,double
.
And see also a marvelous explanation here: https://stackoverflow.com/a/22919112/2886891
add a comment |
Java 8 stream framework has a generic Stream<T>
for objects as elements, and three primitive streams IntStream
, LongStream
, DoubleStream
for the main three primitives. If you work with primitives, use one of those latter, in your case IntStream
.
See the picture:
What lies behind is that:
Java generics cannot work with primitive types: it is possible to have only
List<Integer>
andStream<Integer>
, but notandList<int>
Stream<int>
When the Java Collections framework was introduced, it was introduced only for classes, so if you want to have a
List
ofint
s, you have to wrap them toInteger
s. This is costly!When the Java Streams framework was introduced, they decided to get around this overhead and in parallel with the "class-oriented" streams (using the generics mechanism), they introduced three extra sets of all the library functions, specifically designed for the most important primitive types:
int
,long
,double
.
And see also a marvelous explanation here: https://stackoverflow.com/a/22919112/2886891
add a comment |
Java 8 stream framework has a generic Stream<T>
for objects as elements, and three primitive streams IntStream
, LongStream
, DoubleStream
for the main three primitives. If you work with primitives, use one of those latter, in your case IntStream
.
See the picture:
What lies behind is that:
Java generics cannot work with primitive types: it is possible to have only
List<Integer>
andStream<Integer>
, but notandList<int>
Stream<int>
When the Java Collections framework was introduced, it was introduced only for classes, so if you want to have a
List
ofint
s, you have to wrap them toInteger
s. This is costly!When the Java Streams framework was introduced, they decided to get around this overhead and in parallel with the "class-oriented" streams (using the generics mechanism), they introduced three extra sets of all the library functions, specifically designed for the most important primitive types:
int
,long
,double
.
And see also a marvelous explanation here: https://stackoverflow.com/a/22919112/2886891
Java 8 stream framework has a generic Stream<T>
for objects as elements, and three primitive streams IntStream
, LongStream
, DoubleStream
for the main three primitives. If you work with primitives, use one of those latter, in your case IntStream
.
See the picture:
What lies behind is that:
Java generics cannot work with primitive types: it is possible to have only
List<Integer>
andStream<Integer>
, but notandList<int>
Stream<int>
When the Java Collections framework was introduced, it was introduced only for classes, so if you want to have a
List
ofint
s, you have to wrap them toInteger
s. This is costly!When the Java Streams framework was introduced, they decided to get around this overhead and in parallel with the "class-oriented" streams (using the generics mechanism), they introduced three extra sets of all the library functions, specifically designed for the most important primitive types:
int
,long
,double
.
And see also a marvelous explanation here: https://stackoverflow.com/a/22919112/2886891
edited Nov 21 '18 at 11:49
answered Apr 11 '14 at 10:48


Honza ZidekHonza Zidek
5,19523559
5,19523559
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f23007422%2fusing-streams-with-primitives-data-types-and-corresponding-wrappers%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
4
Isn't it normal to use IntStream methods to deal with IntStreams, and Stream methods to deal with Streams?
– JB Nizet
Apr 11 '14 at 8:35
4
You can also use
Arrays.stream(ints).forEach(System.out::println)
.– skiwi
Apr 11 '14 at 8:52
@skiwi That is really nice to know. Thanks
– ifloop
Apr 11 '14 at 8:59
1
Related to (but not a direct duplicate of) stackoverflow.com/q/14850879/2886891
– Honza Zidek
Feb 7 '18 at 22:18