Skip to content

Commit

Permalink
Implemented the U.joinToString() method
Browse files Browse the repository at this point in the history
  • Loading branch information
javadev authored May 3, 2024
1 parent d0cc77c commit 2e2d5a3
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 1 deletion.
8 changes: 8 additions & 0 deletions src/main/java/com/github/underscore/U.java
Original file line number Diff line number Diff line change
Expand Up @@ -2523,6 +2523,14 @@ public static <T> String join(final Iterable<T> iterable, final String separator
return Underscore.join(iterable, separator);
}

public static <T> String joinToString(final Iterable<T> iterable, final String separator,
final String prefix, final String postfix,
final int limit,
final String truncated,
final Function<T, String> transform) {
return Underscore.joinToString(iterable, separator, prefix, postfix, limit, truncated, transform);
}

public static String toJson(Collection collection) {
return Json.toJson(collection);
}
Expand Down
34 changes: 34 additions & 0 deletions src/main/java/com/github/underscore/Underscore.java
Original file line number Diff line number Diff line change
Expand Up @@ -3320,6 +3320,40 @@ public static <T> String join(final Iterable<T> iterable, final String separator
return sb.toString();
}

public static <T> String joinToString(final Iterable<T> iterable, final String separator,
final String prefix, final String postfix,
final int limit,
final String truncated,
final Function<T, String> transform) {
final StringBuilder sb = new StringBuilder();
int index = 0;
if (prefix != null) {
sb.append(prefix);
}
for (final T item : iterable) {
if (index > 0) {
sb.append(separator);
}
index += 1;
if (limit < 0 || index <= limit) {
sb.append(transform == null ? item.toString() : transform.apply(item));
} else {
break;
}
}
joinToStringPostfix(postfix, limit, truncated, index, sb);
return sb.toString();
}

private static void joinToStringPostfix(String postfix, int limit, String truncated, int index, StringBuilder sb) {
if (limit >= 0 && index > limit) {
sb.append(truncated == null ? "..." : truncated);
}
if (postfix != null) {
sb.append(postfix);
}
}

public static <T> String join(final Iterable<T> iterable) {
return join(iterable, " ");
}
Expand Down
2 changes: 1 addition & 1 deletion src/test/java/com/github/underscore/FunctionsTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ void defer() {
return null;
});
assertEquals(0, counter[0].intValue(), "incr was debounced");
await().atLeast(60, TimeUnit.MILLISECONDS)
await().atLeast(90, TimeUnit.MILLISECONDS)
.until(
() -> {
assertEquals(1, counter[0].intValue(), "incr was debounced");
Expand Down
26 changes: 26 additions & 0 deletions src/test/java/com/github/underscore/UnderscoreTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
import java.util.Objects;
import java.util.Optional;
import java.util.Properties;
import java.util.function.Function;
import java.util.function.Predicate;
import org.junit.jupiter.api.Test;

Expand Down Expand Up @@ -117,6 +118,31 @@ void join() {
assertEquals("--", Underscore.join(asList("", "", ""), "-"));
}

@Test
void joinToString() {
assertEquals("[]", Underscore.joinToString(List.of(), ",", "[", "]",
3, "...", null));
assertEquals("[1,2,3]", Underscore.joinToString(List.of(1, 2, 3), ",",
"[", "]", -1, "...", null));
assertEquals("[1,2,3]", Underscore.joinToString(List.of(1, 2, 3), ",",
"[", "]", 3, "...", null));
assertEquals("[1,2,3,...]", Underscore.joinToString(List.of(1, 2, 3, 4, 5), ",",
"[", "]", 3, "...", null));
Function<Integer, String> transform = i -> "Value-" + i;
assertEquals("[Value-1,Value-2,Value-3]", Underscore.joinToString(List.of(1, 2, 3), ",",
"[", "]", -1, "...", transform));
assertEquals("[1,2,3]", Underscore.joinToString(List.of(1, 2, 3), ",",
"[", "]", -1, "...", null));
assertEquals("{1, 2, 3}", Underscore.joinToString(List.of(1, 2, 3), ", ",
"{", "}", -1, "...", null));
assertEquals("1, 2, ...", Underscore.joinToString(List.of(1, 2, 3, 4), ", ",
"", "", 2, "...", null));
assertEquals("1, 2, ...", Underscore.joinToString(List.of(1, 2, 3, 4), ", ",
null, null, 2, "...", null));
assertEquals("1, 2, ...", Underscore.joinToString(List.of(1, 2, 3, 4), ", ",
null, null, 2, null, null));
}

/*
_.push(['a', 'b', 'c'], 0, 2);
// → ['a', 'b', 'c', 0, 2]
Expand Down
8 changes: 8 additions & 0 deletions src/test/java/com/github/underscore/UtilityTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -478,4 +478,12 @@ void result() {
null,
Underscore.result(asList("result1", "result2"), item -> item.equals("result3")));
}

@Test
void joinToString() {
assertEquals("[]", U.joinToString(List.of(), ",",
"[", "]", 3, "...", null));
assertEquals("[1,2,3]", U.joinToString(List.of(1, 2, 3), ",",
"[", "]", -1, "...", null));
}
}

0 comments on commit 2e2d5a3

Please sign in to comment.