Skip to content

Instantly share code, notes, and snippets.

@civic
Created April 15, 2014 05:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save civic/10704406 to your computer and use it in GitHub Desktop.
Save civic/10704406 to your computer and use it in GitHub Desktop.
package java8;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.List;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collector;
import java.util.stream.Stream;
/**
* Java8のCollectorをfor文と比較しながら一から作って理解する
* @author civic
*/
public class StreamStudy {
public static void main(String[] args) {
//forでの実装
{
List<String> list = Arrays.asList("Hello", "World", "Java8", "Stream", "API");
StringBuilder buff = new StringBuilder();
for (String s: list){
if (buff.length() != 0){
buff.append(", ");
}
buff.append(s);
}
String commaJoinedString = buff.toString();
System.out.println(commaJoinedString);
}
//collectorでの実装
{
Stream<String> stream = Arrays.asList("Hello", "World", "Java8", "Stream", "API").stream();
String commaJoinedString = stream.parallel().collect(new MyStringJoinCollector());
System.out.println(commaJoinedString);
}
}
private static class MyStringJoinCollector implements Collector<String, StringBuilder, String>{
@Override
public Supplier<StringBuilder> supplier() {
return () -> new StringBuilder();
}
@Override
public BiConsumer<StringBuilder, String> accumulator() {
return (sb, s) -> {
if (sb.length() != 0){
sb.append(", ");
}
sb.append(s);
};
}
@Override
public BinaryOperator<StringBuilder> combiner() {
return (sb1, sb2) ->{
if (sb1.length() != 0){
sb1.append(", ");
}
sb1.append(sb2);
return sb1;
};
}
@Override
public Function<StringBuilder, String> finisher() {
return sb -> sb.toString();
}
@Override
public Set<Characteristics> characteristics() {
return EnumSet.noneOf(Characteristics.class);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment