a whole bunch of stuff
[ephemerata.git] / KezvhLib / src-lib / net / kezvh / text / SimpleJoiner.java
blob4213e0d4b4de6d7b8ab10f9fad47614473eeb229
1 /**
3 */
4 package net.kezvh.text;
6 import java.util.List;
8 import net.kezvh.collections.KezvhArrays;
9 import net.kezvh.collections.views.ListSlice;
10 import net.kezvh.collections.wrappers.ArrayAsList;
11 import net.kezvh.functional.lambda.L2;
12 import net.kezvh.functional.morphisms.SimpleListCatamorphism;
14 /**
15 * @author mjacob
17 * @param <T> FIXME comment
19 public final class SimpleJoiner<T> implements Joiner<T> {
20 private final String junction;
22 private final L2<StringBuilder, StringBuilder, T> join = new L2<StringBuilder, StringBuilder, T>() {
23 @Override
24 public StringBuilder op(final StringBuilder param1, final T param2) {
25 return param1.append(SimpleJoiner.this.junction).append(param2);
29 private final SimpleListCatamorphism<StringBuilder, T> cat = new SimpleListCatamorphism<StringBuilder, T>();
31 /**
32 * @param junction FIXME comment
34 public SimpleJoiner(final String junction) {
35 super();
36 this.junction = junction;
39 @Override
40 public String join(final T... values) {
41 if (values.length == 0)
42 return "";
43 return this.cat.fold(this.join, new StringBuilder(values[0].toString()), new ArrayAsList<T>(values, 1)).toString();
46 @Override
47 public String join(final List<T> values) {
48 if (values.isEmpty())
49 return "";
50 return this.cat.fold(this.join, new StringBuilder(values.get(0).toString()), new ListSlice<T>(values, KezvhArrays.range(1, values.size()))).toString();