This project started as a test exercise to know the api stream of java8, then try to practice with parallelism, Docker, bash scripting, in short to practice and have fun.
It can't be taken as an example of anything because there was no intention to do it right from the beginning, so you won't find a good use of design patterns or a correct use of solid principles. Just practice with java8 api stream onwards, as well as apply parallelism to get better performance, play with Docker, bash scripting. The project is basically crap, one of those you dont like at all. It started out as one of those practice ones, doing functional-style stuff from some tests, but then you start playing around, you put something here, there, and you end up with a jumble of stuff you don't like. In short, do not take it as an example of anything.
There are better projects in my repository on how to have a better design following solid principles and good practices.
You can import to eclipse the maven project and run the tests or you can compile the project and run it within your local shell, or creating your local docker container or pulling one created and pushed by me, but latest version is not uploaded to dockerhub, so i recommend to use the shell script downloading first the source code.
docker pull aironman:mystreamjava8:latest
$ docker images
aironman/mystreamjava8 latest 71d2c3357c55 12 minutes ago 643MB
docker run -it 71d2c3357c55 /bin/bash
root@7afd5ea86e03:/# bash /scripts/runMe.sh em 1 files/Euromillones2004_2018.csv files/primitiva.csv
git clone https://github.com/alonsoir/stream-java8-test.git
mvn clean package
java -cp target/MyStreamjava8-1.0.jar com.aironman.ApiStreamTests all 80 PATH_TO/Euromillones2004_2018.csv PATH_TO/primitiva.csv.
80 means the number of iterations, 80 predictions.
java -cp target/MyStreamjava8-1.0.jar com.aironman.ApiStreamTests em 80 PATH_TO/Euromillones2004_2018.csv PATH_TO/primitiva.csv. 80 means the number of iterations, 80 predictions.
java -cp target/MyStreamjava8-1.0.jar com.aironman.ApiStreamTests primitiva 80 PATH_TO/Euromillones2004_2018.csv PATH_TO/primitiva.csv. 80 means the number of iterations, 80 predictions.
bash runMe.sh em 100
The script does not need actually any euromillions or primitiva file. Now it tries to download latest results using wget command.
FECHA,COMB. GANADORA,,,,,,ESTRELLAS,
30/04/2019,05,12,20,26,48,,02,11
26/04/2019,14,33,35,47,50,,09,11
23/04/2019,18,23,27,42,44,,02,07
...
bash runMe.sh em 100 /PATH/TO/Euromillones2004_2018.csv /PATH/TO/primitiva.csv
100 means the number of simulated moves or predictions.
After a few seconds or minutes, depending on how many predictions you want to calculate, a web server will rise at localhost:8080/frequencies and you will be able to see the results sorted by frequency.
You can use localhost:8080/predictions to see one prediction.
02/05/2019
Now the project automatically updates the previous results of the Euromillions draw and raises a small web jetty server with two endpoints:
http://localhost:8080/prediction
and
http://localhost:8080/frequencies
The first one gives you a prediction, you can update the webpage in order to get a new prediction, the second one draws the frequencies for the appearance of the figures.
The Project needs maven, java8 onwards to compile and run the jar, some unix commands to run the script and docker if you want to run a container:
tr
sort
uniq
awk
I think these unix commands come by default in osx and I think they also come by default in linux, not sure in windows.