Android-Java-8-Stream-Example
Android-Java-8-Stream-Example copied to clipboard
Demo app of using Java 8 features with Retrolambda and Lightweight-Stream-API
Android Java 8 Stream API Example
Demo app of using Java 8 features with Retrolambda and Lightweight-Stream-API.
Features:
-
() -> lambda expression
findViewById(R.id.go).setOnClickListener(v -> { final int index = mActionSpinner.getSelectedItemPosition(); if (index != Spinner.INVALID_POSITION) { action(actions[index]); } }); -
Method::references
int cmp = Objects.compare(word, other.word, String::compareToIgnoreCase); -
Stream.API()
return Stream.of(lines) .map(str -> str.split("\t")) .filter(arr -> arr.length == 2) .map(arr -> new Word(arr[0], arr[1])) .collect(Collectors.toList()); -
switch for "string"
switch (action) { case "filter 1": // Filter one word stream = stream.filter(p -> p.getWord().split(" ").length == 1); break; case "filter 2+": // Filter two and more words stream = stream.filter(p -> p.getWord().split(" ").length >= 2); break; // ... } -
try(with-resources) {}
final List<String> lines = new ArrayList<>(); try (final InputStream is = context.getAssets().open("words.txt"); final InputStreamReader isr = new InputStreamReader(is, "UTF-8"); final BufferedReader reader = new BufferedReader(isr)) { String line; while ( (line = reader.readLine()) != null ) { lines.add(line); } } -
Objects (from Java 7)
@Override public boolean equals(Object o) { // ... final Word other = (Word) o; return Objects.equals(translate, other.translate) && Objects.equals(word, other.word); } @Override public int hashCode() { return Objects.hash(word, translate); } -
~~try {~~ Exceptional ~~} catch~~ (functional try/catch)
return Exceptional.of(() -> { final InputStream is = context.getAssets().open("words.txt"); // ... operations which throws Exception ... return lines; }).ifException(e -> Log.e("Java 8 Example", "Utils.readWords", e)) .getOrElse(new ArrayList<>());
Links
Demo app: Java8StreamExample.apk
Blog (Russian): Java 8 в Android со Stream API и лямбдами
Retrolambda: https://github.com/orfjackal/retrolambda
Lightweight-Stream-API: https://github.com/aNNiMON/Lightweight-Stream-API
Screenshots
