Last active
          January 3, 2017 15:50 
        
      - 
      
 - 
        
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)
  
        
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | 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