-
-
Save vandekeiser/f52c1325b5cab618de3a to your computer and use it in GitHub Desktop.
This file contains 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
package fr.mga.foobarqix; | |
import java.util.HashMap; | |
import java.util.Map; | |
import java.util.stream.IntStream; | |
import static java.lang.System.out; | |
import static java.util.Collections.unmodifiableMap; | |
import static java.util.stream.Collectors.joining; | |
public class FunctionalFooBarQix { | |
private static final Map<Integer,String> digitReplacements = digitReplacements(); | |
private static Map<Integer, String> digitReplacements() { | |
Map<Integer,String> digitReplacements = new HashMap<>(); | |
digitReplacements.put(3,"FOO"); | |
digitReplacements.put(5,"BAR"); | |
digitReplacements.put(7, "QIX"); | |
return unmodifiableMap(digitReplacements); | |
} | |
public static String fooBarQix(int number) { | |
String result = ""; | |
result += digitReplacements.entrySet().stream() | |
.filter(replacement -> number % replacement.getKey() == 0) | |
.map(Map.Entry::getValue) | |
.collect(joining()); | |
result += String.valueOf(number).codePoints() | |
.mapToObj(Functional::handleDigit) | |
.collect(joining()); | |
return result.isEmpty() ? String.valueOf(number) : result; | |
} | |
/** | |
* @param digitChar NOT the numeric value of the value, rather the character representing it ( | |
* for instance digitChar=49 represents char '1') | |
* @return | |
*/ | |
private static String handleDigit(int digitChar) { | |
int digit = Character.getNumericValue(digitChar); | |
return digitReplacements.getOrDefault(digit, ""); | |
} | |
public static void main(String[] args) { | |
IntStream.rangeClosed(1, 100) | |
.mapToObj(Functional::fooBarQix) | |
.forEach(out::println); | |
} | |
} |
This file contains 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
package fr.mga.foobarqix; | |
import org.junit.Test; | |
import java.util.stream.IntStream; | |
import static org.fest.assertions.api.Assertions.assertThat; | |
public class FunctionalFooBarQixTest { | |
@Test | |
public void should_work_as_ugly_foobarqix() { | |
IntStream.range(1, 100).forEach(number -> assertThat( | |
Functional.fooBarQix(number) | |
).isEqualTo(uglyFooBarQix(number)) | |
); | |
} | |
private static String uglyFooBarQix(int i) { | |
String result = ""; | |
if(i %3 == 0) result += "FOO"; | |
if(i %5 == 0) result += "BAR"; | |
if(i %7 == 0) result += "QIX"; | |
String integer = String.valueOf(i); | |
for (int j = 0; j < integer.length(); j++) { | |
char element = integer.charAt(j); | |
if(element == '3') result += "FOO"; | |
if(element == '5') result += "BAR"; | |
if(element == '7') result += "QIX"; | |
} | |
return result.isEmpty() ? integer : result; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment