2017-12-27 228 views
-2

我在Java和 初學者我想要做的Java 8如下:通執行時間,把他們在多頭排列

  1. 計算的執行時間我方法 - 具有System.nanoTime
  2. 打發時間作爲流參數我的比較方法,
  3. 將這些值代入從長陣列[2]〜[5],並返回該數組

我不知道如何實現這一點。我嘗試了不同的方式,但我遇到了錯誤,並沒有任何答案。以下是我迄今所做的:

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; 
    }  
} 
+2

請張貼[mcve]和錯誤的正確描述。 – khelwood

+1

[如何計算Java程序執行速度](https://stackoverflow.com/questions/2572868/how-to-time-java-program-execution-speed) –

+0

我執行了我的方法的時間,但我不知道我怎麼能把這個時間傳遞給比較方法,並把它們放在從[2]到[5]的長陣列中,並且返回數組 – user8903246

回答

0

,我發現我的問題的答案,但我不知道爲什麼我沒有執行時間。如果任何結果,你有什麼想法,請讓我知道

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; 
    } 



} 
+0

你的意思是沒有得到執行時間的結果是什麼意思?你的執行時間是否爲零? –