android


Return a List of Object from a List of Optional objects


Consider i have an array list of Optional objects like List visit = {Optional[Visit], Optional[Visit], etc}. How do i get the Visit object from the Optional and just return those objects as a list.
i tried something like this:
return Stream.of(visits).filter(value -> Optional.isPresent(value))
.map((Visit t) -> Optional.get(t))
.collect(Collectors.toList());
and this:
return Stream.of(visits)
.map(visit -> Optional.of(visit).get())
.collect(Collectors.toList());
But this doesn't compile.Am trying to use http://annimon.github.io/Lightweight-Stream-API for this. Any help will be greatly appreciated.Thanks
You may do it this way:
return visits.stream()
.map(visit -> visit.orElse(null))
.filter(Objects::nonNull)
.collect(Collectors.toList());
Assuming visits is of type List<Optional<Visit>>.
Causes Of Your Code Not Compiling
Assuming that the variable visits is of type List<Optional<Visit>> the statement you posted:
Stream.of(visits).filter(value -> Optional.isPresent(value))
.map((Visit t) -> Optional.get(t))
.collect(Collectors.toList());
has the following problems:
Stream.of() takes either one element or many elements of type T and creates a Stream. You use visits as one element of type List<Optional<Visit>> and I think you intend to get a Stream of Optional<Visit> which you may achieve by using visits.stream().
filter(value -> Optional.isPresent(value)) does invoke isPresent(T t) in a static way while the method isPresent(T t) doesn't exist, neither statically nor as an instance method. I think what you intend to do is: filter(value -> value.isPresent()) which is equal to filter(Optional::isPresent). The difference of the second is that Optional::isPresent does not invoke a static method but results in a method reference.
map((Visit) t -> Optional.get(t)) does as well invoke a method get(T t) in a static way which doesn't exist, neither statically nor as an instance method. I think you intended to invoke map((Visit) t -> t.get()) which is equal to map(Optional::get).
Fixing those issues would result in the new statement:
visits.stream().filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());
The difference to my solution is only that you map after filter. As a reader to get it right you need to remember that Optional::get will always return a non-null value. If you map first and filter second you do not have to remember there are no null values because you filter them out in the second step.
You could do it as follows:
List<Visit> visitsWithoutOptionals = visits.stream()
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());

Related Links

Android - How to listen for Wifi Configured Network is being deleted/removed from Wifi Setting
how to add uiview to cocos2d android
Can't click my bottom button with a listview
How does the GMail app implement its selection summary in ActionBar?
Android sliding Drawer for a button
Android: How to clear cache of all application simultaneously
Android Trackball on Custom Dialog
Actionbar list popup selector ignored
camera not taking pictures on button press
How to read fql response in android
AlertDialog Button size is not changing
How do I get characters from EditText?
two listViews in one activity
Android project deployment on device: app is misconfigured
How to a apply style to all the TextViews I have? [duplicate]
Beginner android developer - having difficulty with layouts

Categories

HOME
android-studio-2.2
3d
hessian
yandex
xbee
rds
ado.net
code-coverage
nfs
modal-dialog
sendgrid-api-v3
project
g++
jquery-ui-sortable
pega
alamofire
stellar.js
radgridview
code-generation
do-while
linear-algebra
alpacajs
video-editing
git-extensions
lilypond
spring-async
pagespeed
pchart
flask-sqlalchemy
strongname
draft-js-plugins
twiml
kodi
jett
getpixel
modalviewcontroller
python-pptx
apiary.io
xcode7.3
jpad
amazon-ses
projects-and-solutions
jvmti
branching-and-merging
parser-generator
wc
apache-spark-dataset
memory-mapping
puredata
facebook-pixel
scalding
yii2-user
backbone-collections
filehandle
cd-burning
vibrate
rxtx
structuremap4
vulcanize
spring-cloud-feign
flex4.6
drawstring
dbamp
exim4
dllimport
cgi-bin
.bash-profile
visual-sourcesafe-2005
pyobjc
typeconverter
entity-framework-4.3
zxspectrum
cakephp-2.7
packet-sniffers
ghcjs
crowd
jqmodal
conditionaltagsupport
scriptaculous
mysql-error-1044
isqlquery
model-driven-development
cffile
xcode3.2
boost-signals
google-maps-mobile
ruby-1.8
zend-rest
blender-2.49
request-headers
duplex
wordprocessingml
cldc
xpsdocument

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App