-2

I am a beginner in Java and I want to do the following in Java 8:

  1. Compute the execution time of my methods - with System.nanoTime,
  2. Pass the time as stream argument to my comparison method,
  3. Put these values into a Long array from [2] to [5] and return this array

I do not know how I can achieve this. I tried different ways but I had encountered errors and did not have any answer. Here is what I've done so far:

import java.util.stream.Stream;
import java.io.*;
import java.nio.file.*;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.LongStream;
import java.lang.Object;
import java.util.stream.IntStream;

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author user
*/


public class WinneropsDB implements Winner{

    private  int getYear;
    private int getWinnerAge;
    private String getWinnerName;
    private String getFilmTitle;

    public WinneropsDB(String s) {
        String[] Data = s.split(",",5);
        getYear = Integer.parseInt(Data[1]);
        getWinnerAge = Integer.parseInt(Data[2]);
        getWinnerName = Data[3].substring(1,Data[3].length()-1);
        getFilmTitle = Data[4].substring(1,Data[4].length()-1);
    }
    @Override
    public String toString(){
        return getYear+", "+getWinnerAge+", "+getWinnerName+", "+getFilmTitle;
    }

    public static Stream<Winner> loadData(String[] fileName)  {
        return Arrays.stream(fileName).flatMap(f -> {
            try {
                return Files.lines(Paths.get(f))
                    .filter(first -> !first.startsWith("#"))
                        .map(WinneropsDB:: new);
                } catch (IOException e) {
                    System.out.println("file not found");
                    return null;
            }
        });
    }

    /**
    *
    * @param young
    * @return
    */
    public static Stream<Winner> youngWinners(Stream<Winner> young) {
        return young.filter(w -> w.getWinnerAge() < 35)
            .sorted(Comparator.comparing(Winner :: getWinnerName));
    }

    public static Stream<Winner> extreamWinners (Stream<Winner> mix){
        long startTime = System.nanoTime();
        Comparator<Winner> comparator = Comparator.comparing(Winner -> Winner.getWinnerName());
        Stream<Winner> m = mix.sorted(comparator);
        //Winner[] g = (Winner[]) m.toArray();
        //System.out.println(g[0]);
        Comparator<Winner> comparator1 = Comparator.comparing(Winner -> Winner.getWinnerAge());
        Stream<Winner> m1 = m.sorted(comparator1);
        Winner[] lis = m1.toArray(s -> new Winner[s]);
        Winner youngest = lis[0];
        Winner oldest = lis[lis.length - 1];
        Arrays.stream(lis).forEach(System.out::println);
        System.out.println("youngest: " + youngest +  "       oldest: " + oldest);
        long finishTime = System.nanoTime();
        long timeWinner = finishTime - startTime;
        System.out.println("timeWinner: " + timeWinner);
        comparison(Stream.of(timeWinner));

        return m1;
    }

    public static Stream<String> multiAwardedPerson(Stream<Winner> m){
        long startTime = System.nanoTime();
        Comparator<Winner> comprator = Comparator.comparing(Winner -> Winner.getWinnerName());
        Map<String,List<Winner>> c1 = m.collect(Collectors.groupingBy(Winner::getWinnerName)); 
        //, Collectors.counting()));
        long finishTime = System.nanoTime();
        long timePerson = finishTime - startTime;
        System.out.println("timePerson: " + timePerson);
        comparison(Stream.of(timePerson));

        return c1.values().stream().filter(s -> s.size()>= 2).map(e -> e.get(0)).sorted(comprator).map(f -> f.getWinnerName());

   } 

   public static Stream<String> multiAwardedFilm(Stream<Winner> d){
       long startTime = System.nanoTime();   
       Comparator<Winner> comprator = Comparator.comparing(Winner -> Winner.getYear());
       Map<Integer,List<Winner>> c1 = d.collect(Collectors.groupingBy(Winner::getYear));
       long finishTime = System.nanoTime();
       long timeFilm = finishTime - startTime;
       System.out.println(" timeFilm: " + timeFilm);
       comparison(Stream.of(timeFilm));

       return c1.values().stream().filter(f -> f.size() == 2).map(t -> t.get(0)).sorted(comprator).map(y -> y.getFilmTitle());
    }

    public static <T, U> long measure(Function<Stream<T>,Stream<U>> f , Stream<T> s1){

        long startTime = System.nanoTime();
        Stream<U> s2 = f.apply(s1);
        List<U> collect = s2.collect(Collectors.toList());
        long endTime = System.nanoTime();
        long time = endTime - startTime;

        return time;
    }

    public static long[] comparison(Stream<Winner> e){

        long [] arrayTime = LongStream.of(e).toArray();

        return null;
    }
    /**
    * @param args the command line arguments
    * @throws java.io.FileNotFoundException
    */
    public static void main(String[] args) throws FileNotFoundException {

        String[] fileName = {"G:\\path\\oscar_age_female.csv" , "G:\\path\\oscar_age_male.csv"};

        // TODO code application logic here
        Stream<Winner> loadData = loadData(fileName);
        //loadData.forEach(x -> System.out.println(x));
        //  Stream<Winner> young = youngWinners(loadData);
        //  young.forEach(a -> System.out.println(a));
        Stream<Winner> mix1 = extreamWinners(loadData);
        Stream<String> winner = multiAwardedPerson(loadData);
        //winner.forEach(q -> System.out.println(q));
        Stream<String> date = multiAwardedFilm(loadData);
        //date.forEach(l -> System.out.println(l));

    }

    @Override
    public int getYear() {
        return getYear;
    }

    @Override
    public int getWinnerAge() {
        return getWinnerAge;
    }

    @Override
    public String getWinnerName() {
        return getWinnerName;
    }

    @Override
    public String getFilmTitle() {
        return getFilmTitle;
    }    
}
shmosel
  • 49,289
  • 6
  • 73
  • 138
saharsa
  • 467
  • 1
  • 7
  • 24
  • 2
    Please post a [mcve] and a proper description of the error. – khelwood Dec 27 '17 at 16:04
  • 1
    Possible duplicate of [How to time Java program execution speed](https://stackoverflow.com/questions/2572868/how-to-time-java-program-execution-speed) – Ole V.V. Dec 27 '17 at 16:09
  • i executed the time of my methods but i do not know how can i pass this time to comparison method and put them in long array from [2] to [5] and return array – saharsa Dec 27 '17 at 16:34
  • also i tried to define Long time in my interface, winner, but again i have same problem and i do not know how i can pass this time for all my methods as stream argument to comparison method and put them in Long array – saharsa Dec 27 '17 at 16:36
  • What makes you tink you wnat to use a stream? I don’t think it is well suited for it. What is the desired result of the comparison? I also don’t understand why you don’t want to use [0] and [1] of the array, but this isn’t important. – Ole V.V. Dec 27 '17 at 20:43
  • i found my answer but unfortunately i do not have any result and i do not know what is my problem – saharsa Dec 28 '17 at 00:26
  • it is a question that my professor asked me and i just try to answer and i have to point [0] and [1] of my array are not important you can imagine the value of these are zero – saharsa Dec 28 '17 at 00:30

1 Answers1

0

I found answer of my question but I do not know why i do not have any result for execution time.If you have any idea please let me know

import java.util.stream.Stream;
import java.io.*;
import java.nio.file.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.LongStream;




/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */


/**
 *
 * @author user
 */


public class WinneropsDB implements Winner{



         private  int getYear;
         private int getWinnerAge;
         private String getWinnerName;
         private String getFilmTitle;




         public WinneropsDB(String s ) {

             String[] Data = s.split(",",5);
             getYear = Integer.parseInt(Data[1]);
             getWinnerAge = Integer.parseInt(Data[2]);
             getWinnerName = Data[3].substring(1,Data[3].length()-1);
             getFilmTitle = Data[4].substring(1,Data[4].length()-1);



    }
         @Override
    public String toString(){

        return getYear+", "+getWinnerAge+", "+getWinnerName+", "+getFilmTitle;
    }



    public static Stream<Winner> loadData(String[] fileName) throws IOException{
        return Arrays.stream(fileName).flatMap(f -> {
            try {
                return Files.lines(Paths.get(f))
                        .filter(first -> !first.startsWith("#"))
                        .map(WinneropsDB:: new);
            } catch (IOException ex) {
                System.out.println("file not found");
                return null;
            }
        });
                }

    /**
     *
     * @param young
     * @return
     */
    public static Stream<Winner> youngWinners(Stream<Winner> young) {
      return young.filter(w -> w.getWinnerAge() < 35)
              .sorted(Comparator.comparing(Winner :: getWinnerName));



    }

    public static Stream<Winner> extreamWinners (Stream<Winner> mix){

         Comparator<Winner> comparator = Comparator.comparing(Winner -> Winner.getWinnerName());
         Stream<Winner> m = mix.sorted(comparator);
       //  Winner[] g = (Winner[]) m.toArray();
         //System.out.println(g[0]);
         Comparator<Winner> comparator1 = Comparator.comparing(Winner -> Winner.getWinnerAge());
         Stream<Winner> m1 = m.sorted(comparator1);
         Winner[] lis = m1.toArray(s -> new Winner[s]);
             Winner youngest = lis[0];
             Winner oldest = lis[lis.length - 1];
              Arrays.stream(lis).forEach(System.out::println);
             System.out.println("youngest: " + youngest +  "       oldest: " + oldest);

             return m1;

    }




   public static Stream<String> multiAwardedPerson(Stream<Winner> m){

       Comparator<Winner> comprator = Comparator.comparing(Winner -> Winner.getWinnerName());
          Map<String,List<Winner>> c1 = m.collect(Collectors.groupingBy(Winner::getWinnerName)); //, Collectors.counting()));

     return c1.values().stream().filter(s -> s.size()>= 2).map(e -> e.get(0)).sorted(comprator).map(f -> f.getWinnerName());


   } 

   public static Stream<String> multiAwardedFilm(Stream<Winner> d){

        Comparator<Winner> comprator = Comparator.comparing(Winner -> Winner.getYear());
          Map<Integer,List<Winner>> c1 = d.collect(Collectors.groupingBy(Winner::getYear));

         return
                 c1.values().stream().filter(f -> f.size() == 2).map(t -> t.get(0)).sorted(comprator).map(y -> y.getFilmTitle());


   }


   public static <T, U> long measure(Function<Stream<T>,Stream<U>> f , Stream<T> s1){


             Stream<U> s2 = f.apply(s1);
             long startTime = System.nanoTime();
             s2.collect(Collectors.toList());
             long endTime = System.nanoTime();
             return endTime - startTime;


   }

    public static <T, U> LongStream  runjobs(Stream<Function<Stream<T>,Stream<U>>> Jobs,Stream<T> s) {

        List<T> Data = s.collect(Collectors.toList());
        return Jobs.mapToLong(i -> measure(i, Data.stream()));
    }






   public static long[] comparison(Stream<Winner> e){

       long [] result = new long[5];
       List<Winner> winnerList = e.collect(Collectors.toList());
       result[2] = measure(WinneropsDB:: youngWinners, winnerList.stream());
       result[3] = measure(WinneropsDB:: multiAwardedPerson, winnerList.stream());
       result[4] = measure(WinneropsDB:: multiAwardedFilm, winnerList.stream());
       result[5] = measure(WinneropsDB:: extreamWinners, winnerList.stream());
//       for(long l: result){
//       
//           System.out.println(l);
//       }
       return result;

        }





    /**
     * @param args the command line arguments
     * @throws java.io.FileNotFoundException
     */
    public static void main(String[] args) throws IOException {


        String[] fileName = {"G:\\path\\oscar_age_female.csv" , "G:\\path\\oscar_age_male.csv"};

             // TODO code application logic here
             Stream<Winner> loadData = loadData(fileName);
          // loadData.forEach(x -> System.out.println(x));
          //   Stream<Winner> young = youngWinners(loadData);
          //  young.forEach(a -> System.out.println(a));
         // Stream<Winner> mix1 = extreamWinners(loadData);
      //   Stream<String> winner = multiAwardedPerson(loadData);
//         winner.forEach(q -> System.out.println(q));
        //    Stream<String> date = multiAwardedFilm(loadData);
//            date.forEach(l -> System.out.println(l));
            List<Function<Stream<Winner>,Stream<Winner>>> Jobs = new ArrayList<>();
//            Jobs.add(WinneropsDB::youngWinners);
//            Jobs.add(WinneropsDB::youngWinners);
           // runjob(Job.stream(), loadData).forEach(System.out::println);
            long [] c = comparison(loadData);
         for(int i = 0; i< c.length; i++){

             System.out.println(c[i]);
         }

    }



    @Override
    public int getYear() {
        return getYear;
    }

    @Override
    public int getWinnerAge() {
        return getWinnerAge;
    }

    @Override
    public String getWinnerName() {
        return getWinnerName;
    }

    @Override
    public String getFilmTitle() {
        return getFilmTitle;
    }



}
saharsa
  • 467
  • 1
  • 7
  • 24