import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

public class Teams {
    enum Sport {Baseball, Football,Basketball,Hockey}

    class athlete {
        public Sport game;
        public String name;
        public String year;  //Frosh, Soph, Jr, Senior
        public int testgrade; //entrance exam grade

        public athlete(Sport s,String n,String y,int t){
            game=s;
            name=n;
            year=y;
            testgrade=t;
        }
    }

    public static void main(String args[]) {
        new Teams();
    }
    public Teams(){
        athlete ss = new athlete(Sport.Baseball, "Sam Smith", "Jr", 95);
        athlete jj = new athlete(Sport.Basketball, "Joe Johnson", "Jr", 90);
        athlete rb = new athlete(Sport.Baseball,"Robert Brown", "Soph", 80);
        athlete bj = new athlete(Sport.Hockey, "Bob Jones", "Jr", 85);
        athlete jr = new athlete(Sport.Baseball, "Joe Roberts", "Senior", 65);
        athlete le = new athlete(Sport.Basketball,"Ed Edwards", "Soph", 70);
        List<athlete> allplayers = new ArrayList<>();
        allplayers.add(ss);allplayers.add(jj);allplayers.add(rb);
        allplayers.add(bj);allplayers.add(jr);allplayers.add(le);
        Stream<athlete> playerstream = allplayers.stream();
        Stream<athlete> baseballers = playerstream.filter((a) -> a.game==Sport.Baseball);
        long thecount=baseballers.count();
        // int value= baseballers.mapToInt((a)-> a.testgrade).sum(); error: stream acted on or closed.
        ///////////////////////////////////////////////////////////////////////////
        int value=allplayers.stream()                     //A stream of athletes.
                  .filter((a) -> a.game==Sport.Baseball)  //into A stream of Baseball Players.
                  .mapToInt((a)-> a.testgrade)            // into A stream of integers.
                  .sum();                                 // into the sum of the stream of integers

        System.out.println("The number of Baseball Players is  : " +thecount+
                           "\nThere average entrance testgrade is : "+ (value/thecount ));
        /////////////////////////////////////

        System.out.println("\nThe BasketBall Players are");
        allplayers.stream()
        .filter((a) -> a.game==Sport.Basketball)
        .forEach((a)->System.out.println(a.name));
/////////////////////////////////////
        System.out.println("\nThe BasketBall Players in order are");

        allplayers.stream()
        .filter((a) -> a.game==Sport.Basketball)
        .sorted((a, b) -> a.name.compareTo(b.name))
        .forEach((a)->System.out.println(a.name));
/////////////////////////////////////
        System.out.println("\nThe Basketball Players again in order are");
        allplayers.stream()
        .filter((a) -> a.game==Sport.Basketball)
        .sorted((a, b) -> a.name.compareTo(b.name))
        .map((a)->a.name)
        .forEach(System.out::println);

    }
}