Skip to content

Instantly share code, notes, and snippets.

@tonvanbart
Last active January 3, 2017 15:50
Show Gist options
  • Save tonvanbart/592616996e1ee4e4216dedb7e3a7fc3f to your computer and use it in GitHub Desktop.
Save tonvanbart/592616996e1ee4e4216dedb7e3a7fc3f to your computer and use it in GitHub Desktop.
Silly example about converting an array of strings to a single comma-separated, uppercased string. Note the difference in the effect of orElseGet() vs the effect of orElse() (which calls makeEmpty() regardless of if it's needed)
import org.junit.Test;
import java.util.Arrays;
import java.util.Optional;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
/**
* Created by ton on 09/12/16.
*/
public class TryStream {
private String[] arr1 = { null, "two", "three"};
private String[] arr2 = { "one", null, "three"};
private String[] arr3 = { "one", "two", null};
private String[] single = { "one" };
private String[] empty = { };
@Test
public void testConvert0() {
assertThat(convert0(arr1), is("TWO,THREE"));
assertThat(convert0(arr2), is("ONE,THREE"));
assertThat(convert0(arr3), is("ONE,TWO"));
assertThat(convert0(single), is("ONE"));
assertThat(convert0(empty), is(""));
}
@Test
public void testConvert1() {
assertThat(convert1(arr1), is("TWO,THREE"));
assertThat(convert1(arr2), is("ONE,THREE"));
assertThat(convert1(arr3), is("ONE,TWO"));
assertThat(convert1(single), is("ONE"));
assertThat(convert1(empty), is(""));
}
@Test
public void testConvert2() {
assertThat(convert2(arr1), is("TWO,THREE"));
assertThat(convert2(arr2), is("ONE,THREE"));
assertThat(convert2(arr3), is("ONE,TWO"));
assertThat(convert2(single), is("ONE"));
assertThat(convert2(empty), is(""));
}
private static String convert0(String[] strings) {
return Arrays.stream(strings)
.filter (s -> s != null)
.map(String::toUpperCase)
.reduce((s1, s2) -> s1 + "," +s2)
.orElseGet(TryStream::makeEmpty);
}
private static String makeEmpty() {
System.out.println("makeEmpty()");
return "";
}
private static String convert1(String[] strings) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i< strings.length; i++) {
if (strings[i] != null) {
if (builder.length() > 0) {
builder.append(",");
}
builder.append(strings[i].toUpperCase());
}
}
return builder.toString();
}
private static String convert2(String[] strings) {
return Arrays.stream(strings)
.map(Optional::ofNullable)
.filter(Optional::isPresent)
.map(Optional::get)
.map(String::toUpperCase)
.reduce((s1, s2) -> s1 + "," +s2)
.orElse(makeEmpty());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment