【发布时间】:2023-02-17 03:27:14
【问题描述】:
我想制作一个简单的程序来比较通过“for loop”、“foreach”或“stream”重写和打印字符串集合需要多长时间。字符串是用“y”代替“i”的句子。在我的例子中,我制作了 count() ,其中我设置为计算 stream() 方法,但我想制作通用测量方法。但我不知道该怎么做......它应该像这样工作:在主类中是`counter(forLoop);`它应该从方法类中调用`forLoop();`
`counter(forEach);` 它应该从 Metrod 类调用 `forEach();`
`counter(stream);` 它应该从 Method 类调用 `stream();`
我不知道如何将方法作为参数传递
我上课那些方法在哪里:
import java.util.*;
import java.util.stream.*;
public class Methods {
private List<String> sentence = new ArrayList<>();
private String oldLetter = "i";
private String newLetter = "y";
private String methodType;
public String getMethodType() {
return methodType;
}
//making a collection with String
public void setSizeOfCollection(int size){
for (int i = 0; i < size; i++) {
sentence.add("Siti Zbinek plitce zvikal sirovi pelinek.");
}
}
public void forLoop(){
methodType = "For loop";
for (int i = 0; i < sentence.size(); i++) {
for (int j = 0; j < sentence.size(); j++) {
String replaceLetters = sentence.get(j);
replaceLetters = replaceLetters.replaceAll(oldLetter, newLetter);
sentence.set(j, replaceLetters);
}
System.out.println(sentence.get(i));
}
}
public void forEach(){
methodType = "For each";
String replacedLetters = "";
for(String oneLine: sentence){
for(String originalLetters: sentence){
replacedLetters = originalLetters.replaceAll(oldLetter,newLetter);
}
System.out.println(replacedLetters);
}
}
public void stream(){
methodType= "Stream";
sentence.stream()
.map(e->e.replaceAll(oldLetter,newLetter))
.collect(Collectors.toList())
.forEach(System.out::println);
}
}
这是 count(),工作正常,但仅适用于方法 stream()。在评论中是我想象它应该如何。但我不知道 Java 是怎么做的:(
import org.apache.commons.lang.time.*;
public class Counter {
private Methods methods;
private String methodType;
private StopWatch stopWatch = new StopWatch();
long timeTaken = 0;
//here should be something like any method as a parameter XXX xxx
// public void count(Methods methods XXX xxx)
public void count(Methods methods){
stopWatch.start();
// here sould be something what call any function by your choice, not only stream()
// methods.xxx;
methods.stream();
stopWatch.stop();
timeTaken= stopWatch.getTime();
System.out.println(methods.getMethodType()+" takes "+ timeTaken + " ms." );
}
}
最后是主课
public class Main {
public static void main(String[] args) {
Methods methods = new Methods();
Counter counter = new Counter();
methods.setSizeOfCollection(10000);
counter.count(methods);
//here should be finally three times method, with different parameters:
// counter.count(methods, forEach);
// counter.count(methods, forLoop);
// counter.count(methods, stream);
}
}
有什么建议吗?
【问题讨论】:
-
您可以声明 count() 来接受一个 Runnable,然后传递实现 Runnable 的类,或者像
() -> doSomething();这样的 lambda。 -
@AndyThomas 或使用方法参考:
methods::stream、methods::forEach、methods::forLoop。
标签: java methods parameters