BAEL-6438 Code for the Find the longest word in a given string article
This commit is contained in:
parent
2d2c842d2f
commit
daf01922de
|
@ -0,0 +1,36 @@
|
||||||
|
package com.baeldung.longestword;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class LongestWordFinder {
|
||||||
|
|
||||||
|
public Optional<String> findLongestWord(String sentence) {
|
||||||
|
return Optional.ofNullable(sentence)
|
||||||
|
.filter(string -> !string.trim()
|
||||||
|
.isEmpty())
|
||||||
|
.map(string -> string.split("\\s"))
|
||||||
|
.map(Arrays::asList)
|
||||||
|
.map(list -> Collections.max(list, Comparator.comparingInt(String::length)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> findLongestWords(String sentence) {
|
||||||
|
if (sentence == null || sentence.trim()
|
||||||
|
.isEmpty()) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
String[] words = sentence.split("\\s");
|
||||||
|
int maxWordLength = Arrays.stream(words)
|
||||||
|
.mapToInt(String::length)
|
||||||
|
.max()
|
||||||
|
.orElseThrow();
|
||||||
|
return Arrays.stream(words)
|
||||||
|
.filter(word -> word.length() == maxWordLength)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
package com.baeldung.longestword;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class LongestWordFinderUnitTest {
|
||||||
|
|
||||||
|
LongestWordFinder longestWordFinder = new LongestWordFinder();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenNull_whenFindLongestWord_thenEmpty() {
|
||||||
|
assertThat(longestWordFinder.findLongestWord(null)).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenEmptyString_whenFindLongestWord_thenEmpty() {
|
||||||
|
assertThat(longestWordFinder.findLongestWord("")).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenStringWithOnlySpaces_whenFindLongestWord_thenEmpty() {
|
||||||
|
assertThat(longestWordFinder.findLongestWord(" ")).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenAPhraseWithALongestWord_whenFindLongestWord_thenLongestWordOfThePhrase() {
|
||||||
|
assertThat(longestWordFinder.findLongestWord("This is a phrase with words")).hasValue("phrase");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenAPhraseWithVariousWordsOfMaxLength_whenFindLongestWord_thenAnyOfTheLongestsWordsOfThePhrase() {
|
||||||
|
assertThat(longestWordFinder.findLongestWord("Baeldung is another word of size eight in this sentence")
|
||||||
|
.get()).isIn("Baeldung", "sentence");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenNull_whenFindLongestWords_thenEmpty() {
|
||||||
|
assertThat(longestWordFinder.findLongestWords(null)).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenEmptyString_whenFindLongestWords_thenEmpty() {
|
||||||
|
assertThat(longestWordFinder.findLongestWords("")).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenStringWithOnlySpaces_whenFindLongestWords_thenEmpty() {
|
||||||
|
assertThat(longestWordFinder.findLongestWords(" ")).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenAPhraseWithALongestWord_whenFindLongestWords_thenLongestWordOfThePhrase() {
|
||||||
|
assertThat(longestWordFinder.findLongestWords("This is a phrase with words")).containsExactly("phrase");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenAPhraseWithVariousWordsOfMaxLength_whenFindLongestWords_thenAllLongestsWords() {
|
||||||
|
assertThat(longestWordFinder.findLongestWords("Baeldung is another word of size eight in this sentence")).containsExactly("Baeldung", "sentence");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue