package com.levelup.java.util;
import static java.util.Objects.nonNull;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.StringJoiner;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.junit.Test;
/**
* This java example will demonstrate how to join
* strings in java 8.
*
* @author Justin Musgrove
* @see <a href='http://www.leveluplunch.com/java/examples/stringjoiner-example/'>StringJoiner example</a>
*/
public class StringJoinerExample {
@Test
public void join_strings() {
StringJoiner sj = new StringJoiner(",");
String joinedStrings = sj.add("test").add("whatever").toString();
assertEquals("test,whatever", joinedStrings);
}
@Test
public void join_strings_prefix_suffix () {
StringJoiner sj = new StringJoiner(",", "[", "]");
String joinedStrings = sj.add("test").add("whatever").toString();
assertEquals("[test,whatever]", joinedStrings);
}
@Test
public void join_a_list_of_strings() {
List<String> cloudGroups = new ArrayList<>();
cloudGroups.add("Cirrus");
cloudGroups.add("Alto");
cloudGroups.add("Stratus");
cloudGroups.add("Vertical Growth");
cloudGroups.add("Special Clouds");
String cloudGroupsJoined = String.join(",", cloudGroups);
assertEquals("Cirrus,Alto,Stratus,Vertical Growth,Special Clouds",
cloudGroupsJoined);
}
@Test
public void join_a_list_of_strings_skipping_null() {
List<String> cloudGroups = new ArrayList<>();
cloudGroups.add("Cirrus");
cloudGroups.add("Alto");
cloudGroups.add(null);
cloudGroups.add(null);
cloudGroups.add("Stratus");
cloudGroups.add("Vertical Growth");
cloudGroups.add("Special Clouds");
cloudGroups.add(null);
String cloudGroupsJoined = cloudGroups.stream()
.filter(Objects::nonNull).collect(Collectors.joining(","));
assertEquals("Cirrus,Alto,Stratus," + "Vertical Growth,Special Clouds",
cloudGroupsJoined);
}
@Test
public void join_a_list_of_strings_replacing_null() {
List<String> cloudGroups = new ArrayList<>();
cloudGroups.add("Cirrus");
cloudGroups.add("Alto");
cloudGroups.add(null);
cloudGroups.add(null);
cloudGroups.add("Stratus");
cloudGroups.add("Vertical Growth");
cloudGroups.add("Special Clouds");
cloudGroups.add(null);
Function<String, String> replaceNull = new Function<String, String>() {
@Override
public String apply(String t) {
if (t == null) {
return "[unknown]";
} else {
return t;
}
}
};
String cloudGroupsJoined = cloudGroups.stream()
// .map(s -> { if (s == null) return "[unknown]"; else return s;})
// TODO determine why cast isn't working quite right
.map(replaceNull)
.collect(Collectors.joining(" and "));
assertEquals("Cirrus and Alto and [unknown] and [unknown] "
+ "and Stratus and Vertical Growth "
+ "and Special Clouds and [unknown]", cloudGroupsJoined);
}
}