This code sums up Lambda, Stream, Method Reference and Multithreading all in one.
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.function.IntPredicate;
/**
*
* @author Aamir khan
*/
public class Count {
private String userinpt = "";
private final List<runnable> tasks;
public static void main(String[] args) {
Count c = new Count();
c.takeInput();
c.start();
}
/**
* init the list of tasks
**/
Count() {
//Lambda in action
tasks = Arrays.asList(
() -> countVowels(),
() -> countCons(),
() -> countDigits(),
() -> countWhiteSpace()
);
}
/**
* take user input used by
* {@link #count(java.util.function.IntPredicate)};
*
*/
private void takeInput() {
System.out.println("Enter your Text");
userinpt = new Scanner(System.in).useDelimiter("\\z").next();
}
/***
* submit the task to Thread pool and execute them.
*/
private void start() {
//Multithreading in action
ExecutorService thread = Executors.newFixedThreadPool(tasks.size());
tasks.forEach(thread::submit);
thread.shutdown();
}
private void countVowels() {
//Method Reference in action
long numberOfVowels = count(this::isVowel);
print("Total number of Vowels: " + numberOfVowels);
}
private void countWhiteSpace() {
long numberOfWhiteSpaces = count(Character::isWhitespace);
print("Total number of Spaces: " + numberOfWhiteSpaces);
}
private void countDigits() {
long numberOfDigits = count(Character::isDigit);
print("Total number of Digits: " + numberOfDigits);
}
private void countCons() {
long numberOfCons = count(e -> Character.isLetter(e) && !isVowel(e));
print("Total number of Consonants: " + numberOfCons);
}
/**
* filter with given Predicate and count the filtered result
**/
private long count(IntPredicate filter) {
// Stream in action
return userinpt.toLowerCase().chars().filter(filter).count();
}
//util methods
public boolean isVowel(int codePoint) {
//checking for lower case because the input will only be in lower case
return (codePoint == 'a')
|| (codePoint == 'e')
|| (codePoint == 'i')
|| (codePoint == 'o')
|| (codePoint == 'u');
}
public void print(String s) {
System.out.println(s);
}
}
No comments :
Post a Comment