JAVA 作业 用JAVA8新特性 获取新浪财经股票
参考:
https://my.oschina.net/u/154628/blog/508042
https://www.programcreek.com/java-api-examples/index.php?api=java.util.DoubleSummaryStatistics
https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/
代码:
package homework01; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; /** * * @author yiwzhong */ public class StockFinance { public static final List<String> shStocks = Arrays.asList( "sh601001", "sh601002", "sh601003", "sh601005", "sh601006", "sh601007", "sh601008", "sh601009", "sh601012"); public static final List<String> szStocks = Arrays.asList( "sz002315", "sz002316", "sz002317"); public static String getStock(final String strUrl, final String code, String opt) { try { final URL url; url = new URL(strUrl + code + opt); final BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(),"GBK")); //reader.lines().forEach(System.out::println); return reader.lines().findFirst().orElse(""); } catch(Exception ex) { throw new RuntimeException(ex); } } public static void template() { final String chnUrl = "http://hq.sinajs.cn/list="; System.out.println("\nChina Shanghai Stocks:"); StockFinance.shStocks .stream() .map( name -> getStock(chnUrl, name, "")) .map(s -> { String[] datas = s.split(","); return datas[1];}) .forEach(System.out::println); System.out.println("\nChina Shenzhen Stocks:"); StockFinance.szStocks .stream() .map( name -> getStock(chnUrl, name, "")) .sorted((s1,s2)->{s1 = s1.split(",")[1]; s2 = s2.split(",")[1]; return Double.valueOf(s1).compareTo( Double.valueOf(s2));}) .forEach(System.out::println); } /** * 自动扩充股票 * @param startStockPosition 股票起始编号 * @param addStocksNum 添加的股票数 * @param preStocksName 股票前缀,比如sh,sz * @return */ public static ArrayList<String> addStocks(String startStockPosition, int addStocksNum, String preStocksName){ //最大查找次数 final int maxFind = 100 + addStocksNum; final String chnUrl = "http://hq.sinajs.cn/list="; ArrayList<String> curStocks = new ArrayList<>(); int start = Integer.parseInt(startStockPosition); //编号补零 Function<Integer,String> handler = (x)->{ int tmp = x,digit = 0; StringBuilder stringBuilder = new StringBuilder(); while(tmp>0){tmp/=10;++digit;} digit = 6 - digit; while(digit>0){--digit;stringBuilder.append("0");} return stringBuilder.toString() + x.toString(); }; //添加股票 for(int i = 1;i<=addStocksNum;++i){ String stockName = preStocksName + "" + handler.apply(i+ start); String stock = getStock(chnUrl, stockName, ""); if (stock.indexOf(',') == -1) { if(addStocksNum < maxFind) ++addStocksNum;//如果该股票不存在则继续查找 }else{ curStocks.add(stock); } } return curStocks; } public static void hw3_1() { System.out.println("---------------Homework 3 - 1:---------------"); final String chnUrl = "http://hq.sinajs.cn/list="; ArrayList<String> curStocks = addStocks("601001",21,"sh"); System.out.println("\nChina Shenzhen Stocks:"); DoubleSummaryStatistics doubleSummaryStatistics = curStocks.stream() .mapToDouble((s1)->{ String[] t1 = s1.split(","); String a1 = t1[1], a2 = t1[2]; Double dis1 = Math.abs(Double.valueOf(a1) - Double.valueOf(a2)); return dis1; }).summaryStatistics(); double max = doubleSummaryStatistics.getMax(); double min = doubleSummaryStatistics.getMin(); double avg = doubleSummaryStatistics.getAverage(); System.out.println("max:" + max); System.out.println("min:" + min); System.out.println("avg:" + avg); } public static void hw3_2() { System.out.println("---------------Homework 3 - 2:---------------"); ArrayList<String> curStocks = addStocks("002315",21,"sz"); final String chnUrl = "http://hq.sinajs.cn/list="; System.out.println("\nChina Shanghai Stocks:"); curStocks.stream() .sorted((s1,s2)->{ String[] t1 = s1.split(","); String a1 = t1[1], a2 = t1[2]; String[] t2 = s2.split(","); String b1 = t2[1], b2 = t2[2]; Double dis1 = Math.abs(Double.valueOf(a1) - Double.valueOf(a2)), dis2 = Math.abs(Double.valueOf(b1) - Double.valueOf(b2)); return dis1.compareTo(dis2);}) .forEach(System.out::println); } public static void main(String[] args) { StockFinance.template(); StockFinance.hw3_1(); StockFinance.hw3_2(); } }

浙公网安备 33010602011771号