I’m reading getting the names of all the images inside a subfolder
of my assets
folder.
//Returns name of all the images inside folder_previews private static List<String> getPreviews(Context context) throws IOException { AssetManager assetManager = context.getAssets(); String[] files = assetManager.list("folder_previews"); return Arrays.asList(files); }
I then want to concat a String
before each one.
try { List<String> imageNames = getPreviews(context); String prefix = "file:///android_asset/folder_previews/"; List<String> formattedImageNames = new ArrayList<>(); for(String s : imageNames){ formattedImageNames.add(prefix.concat(s)); } } catch (IOException e) { e.printStackTrace(); }
Is there a way to do it inside my method getPreviews
with Array's
.asList()
so I can avoid using the loop?
Advertisement
Answer
Arrays.asList
doesn’t allow the creation of List
s from derived items directly.
However, you could use Stream
s for creating a List
from concatenated String
s.
imageNames .stream() .map(s->prefix.concat(s))//alternative: .map(prefix::concat) .toList();
Before Java 16, you would need to use .collect(Collectors.toList())
instead of .toList()
.
This essentially does the same as your loop. It creates a Stream
(a data processing pipeline) from imageNames
, maps each name (converts each name) with prefix.concat(s)
and collects the result to a List
.
Note that you might also want to use the +
-operator for string concatenation.