1.3 模板方法:泛型模板+ 函数式编程(Function:去掉接口)
package demo.spring.boot.demospringboot;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
public class Test {
private Logger logger = LoggerFactory.getLogger(getClass());
/**
* 使用了模板泛型方法,+ function 处理input留作后期实现
*
* @param sh
* @param function
* @param <T>
* @return
*/
public <T> T executeLinuxCmd(String sh, Function<InputStream, T> function) {
String cmd = sh;
logger.info("sh is :{}", cmd);
Runtime run = Runtime.getRuntime();
InputStream in = null;
T result = null;
try {
Process process = run.exec(cmd);
in = process.getInputStream();
result = function.apply(in);
in.close();
process.destroy();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 调用了模板方法,调用时实现逻辑
*
* @param sh
* @return
*/
public List<String> getResult(String sh) {
return this.executeLinuxCmd(sh, inputStream -> {
Reader reader = new InputStreamReader(inputStream);
LineNumberReader lineNumberReader
= new LineNumberReader(reader);
List<String> list;
list = lineNumberReader.lines().collect(Collectors.toList());
try {
lineNumberReader.close();
} catch (IOException e) {
e.printStackTrace();
}
return list;
});
}
@org.junit.Test
public void test() {
List<String> list = this.getResult("ls");
logger.info("result:{}", list);
}
}
转载:https://blog.csdn.net/one_chao/article/details/102323677
查看评论