Program works with own implementations, but the last two requirements are still not checked?
package com.codegym.task.task22.task2209;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.Function;
/*
Make a word chain
*/
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Path path = Paths.get(reader.readLine());
reader.close();
BufferedReader fileReader = Files.newBufferedReader(path);
Set<String> wordSet = new HashSet<>();
while(fileReader.ready()) {
String line = fileReader.readLine();
wordSet.addAll(Arrays.asList(line.split(" ")));
}
// ...
StringBuilder result = getLine(new String[]{"Okinawa", "Washington",
"Auckland", "Kalamazoo", "Norfolk"});
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
if(words.length == 0)
return new StringBuilder();
Function<String[], Integer> findLeadingOne = a -> {
List<String> list = Arrays.asList(a);
for(int i = 0; i < list.size(); i++) {
String cOne = list.get(i);
char cFirstChar = cOne.toLowerCase().charAt(0);
boolean isMatched = false;
for(int e = 0; e < list.size(); e++) {
if(e == i)
continue;
String s = list.get(e);
char innerLastChar = s.toLowerCase().charAt(s.length() - 1);
if(innerLastChar == cFirstChar) {
isMatched = true;
break;
}
}
if(!isMatched)
return i;
}
return -1;
};
Function<String[], StringBuilder> f = array -> {
int leadingPos = findLeadingOne.apply(array);
List<String> list = new ArrayList<>();
for(String s : array)
list.add(s);
List<String> sortedList = new ArrayList<>();
sortedList.add(list.get(leadingPos));
list.remove(leadingPos);
while(!list.isEmpty()) {
String lastElement = sortedList.get(sortedList.size() - 1);
char lastChar = lastElement.toLowerCase().charAt(lastElement.length() - 1);
for(int i = 0; i < list.size(); i++) {
String current = list.get(i);
char firstChar = current.toLowerCase().charAt(0);
if(lastChar == firstChar) {
sortedList.add(current);
list.remove(i);
break;
}
}
}
StringBuilder sb = new StringBuilder();
for(int i = 0; i < sortedList.size(); i++) {
String current = sortedList.get(i);
sb.append(current);
if(i < sortedList.size() - 1)
sb.append(" ");
}
return sb;
};
return f.apply(words);
}
}