经过4.21和4.22的不断修改完善,经测试可以用。(有史以来写的最牛逼的一段代码了)
将其设置成CalaculationUtil工具类
package com.simnectzbank.lbs.processlayer.stock.util;
import com.simnectzbank.lbs.processlayer.stock.clientmodel.StockIndexHistoryModel;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.*;
import java.util.stream.Collectors;
public class CalculationUtil {
@SuppressWarnings("unchecked")
public static Map<String, BigDecimal> calculateChinaUpDown(List<StockIndexHistoryModel> list){
//获取list对象的last字段组装成新list
List<BigDecimal> lastList1 = list.stream().map(StockIndexHistoryModel::getLast).collect(Collectors.toList());
List<String> typeList1 = list.stream().map(StockIndexHistoryModel::getType).collect(Collectors.toList());
//创建UpDown的Map
Map<String,BigDecimal> upDownMap = new HashMap<>();
boolean flag1= true;
boolean flag2= true;
for(int i=0;i<2;i++){
for(int j=0;j<list.size();j++){
if(flag1 && flag2){
if(typeList1.get(i).equals("SSEC")){
for(int m =i+1;m<list.size();m++){
if(flag2){
if(typeList1.get(m).equals("SSEC")){
BigDecimal subtract = lastList1.get(i).subtract(lastList1.get(m));
upDownMap.put("SSEC",subtract);
if(upDownMap.get("SSEC")!=null){
flag2=false;
}
}
}
}
}else if(typeList1.get(i).equals("CSI300")){
for(int n =i+1;n<list.size();n++){
if(flag1){
if(typeList1.get(n).equals("CSI300")){
BigDecimal subtract = lastList1.get(i).subtract(lastList1.get(n));
upDownMap.put("CSI300",subtract);
if(upDownMap.get("CSI300")!=null){
flag1=false;
}
}
}
}
}
}
}
flag1 =true;
flag2 =true;
}
return upDownMap;
}
public static Map<String, BigDecimal> calculateHkUpDown(List<StockIndexHistoryModel> list){
//获取list对象的last字段组装成新list
List<BigDecimal> lastList1 = list.stream().map(StockIndexHistoryModel::getLast).collect(Collectors.toList());
List<String> typeList1 = list.stream().map(StockIndexHistoryModel::getType).collect(Collectors.toList());
//创建UpDown的Map
Map<String,BigDecimal> upDownMap = new HashMap<>();
boolean flag2= true;
for(int i=0;i<2;i++){
for(int j=0;j<list.size();j++){
if(flag2){
if(typeList1.get(i).equals("HSI")){
for(int m =i+1;m<list.size();m++){
if(flag2){
if(typeList1.get(m).equals("HSI")){
BigDecimal subtract = lastList1.get(i).subtract(lastList1.get(m));
upDownMap.put("HSI",subtract);
if(upDownMap.get("HSI")!=null){
flag2=false;
}
}
}
}
}
}
}
}
return upDownMap;
}
public static Map<String, BigDecimal> calculateWorldUpDown(List<StockIndexHistoryModel> list){
//获取list对象的last字段组装成新list
List<BigDecimal> lastList1 = list.stream().map(StockIndexHistoryModel::getLast).collect(Collectors.toList());
List<String> typeList1 = list.stream().map(StockIndexHistoryModel::getType).collect(Collectors.toList());
//创建UpDown的Map
Map<String,BigDecimal> upDownMap = new HashMap<>();
boolean flag1= true;
boolean flag2= true;
for(int i=0;i<2;i++){
for(int j=0;j<list.size();j++){
if(flag1 && flag2){
if(typeList1.get(i).equals("IXIC")){
for(int m =i+1;m<list.size();m++){
if(flag2){
if(typeList1.get(m).equals("IXIC")){
BigDecimal subtract = lastList1.get(i).subtract(lastList1.get(m));
upDownMap.put("IXIC",subtract);
if(upDownMap.get("IXIC")!=null){
flag2=false;
}
}
}
}
}else if(typeList1.get(i).equals("DJI")){
for(int n =i+1;n<list.size();n++){
if(flag1){
if(typeList1.get(n).equals("DJI")){
BigDecimal subtract = lastList1.get(i).subtract(lastList1.get(n));
upDownMap.put("DJI",subtract);
if(upDownMap.get("DJI")!=null){
flag1=false;
}
}
}
}
}
}
}
flag1 =true;
flag2 =true;
}
return upDownMap;
}
@SuppressWarnings("unchecked")
public static Map<String, BigDecimal> calculateChinaUpDownPercentage(List<StockIndexHistoryModel> list){
//获取list对象的last字段组装成新list
List<BigDecimal> upDownList = list.stream().map(StockIndexHistoryModel::getUpDown).collect(Collectors.toList());
List<BigDecimal> lastList = list.stream().map(StockIndexHistoryModel::getLast).collect(Collectors.toList());
List<String> typeList = list.stream().map(StockIndexHistoryModel::getType).collect(Collectors.toList());
//创建UpDown的Map
Map<String,BigDecimal> upDownMap = new HashMap<>();
boolean flag1= true;
boolean flag2= true;
for(int i=0;i<2;i++){
for(int j=0;j<list.size();j++){
if(flag1 && flag2){
if(typeList.get(i).equals("SSEC")){
for(int m =i+1;m<list.size();m++){
if(flag2){
if(typeList.get(m).equals("SSEC")){
BigDecimal divide = upDownList.get(i).divide(lastList.get(m),3,BigDecimal.ROUND_HALF_UP);
upDownMap.put("SSEC",divide);
if(upDownMap.get("SSEC")!=null){
flag2=false;
}
}
}
}
}else if(typeList.get(i).equals("CSI300")){
for(int n =i+1;n<list.size();n++){
if(flag1){
if(typeList.get(n).equals("CSI300")){
BigDecimal divide = upDownList.get(i).divide(lastList.get(n),3,BigDecimal.ROUND_HALF_UP);
upDownMap.put("CSI300",divide);
if(upDownMap.get("CSI300")!=null){
flag1=false;
}
}
}
}
}
}
}
flag1 =true;
flag2 =true;
}
return upDownMap;
}
public static Map<String, BigDecimal> calculateHkUpDownPercentage(List<StockIndexHistoryModel> list){
//获取list对象的last字段组装成新list
List<BigDecimal> lastList = list.stream().map(StockIndexHistoryModel::getLast).collect(Collectors.toList());
List<String> typeList = list.stream().map(StockIndexHistoryModel::getType).collect(Collectors.toList());
List<BigDecimal> upDownList = list.stream().map(StockIndexHistoryModel::getUpDown).collect(Collectors.toList());
//创建UpDown的Map
Map<String,BigDecimal> upDownMap = new HashMap<>();
boolean flag2= true;
for(int i=0;i<2;i++){
for(int j=0;j<list.size();j++){
if(flag2){
if(typeList.get(i).equals("HSI")){
for(int m =i+1;m<list.size();m++){
if(flag2){
if(typeList.get(m).equals("HSI")){
BigDecimal subtract = upDownList.get(i).divide(lastList.get(m),3,BigDecimal.ROUND_HALF_UP);
upDownMap.put("HSI",subtract);
if(upDownMap.get("HSI")!=null){
flag2=false;
}
}
}
}
}
}
}
}
return upDownMap;
}
@SuppressWarnings("unchecked")
public static Map<String, BigDecimal> calculateWorldUpDownPercentage(List<StockIndexHistoryModel> list){
//获取list对象的last字段组装成新list
List<BigDecimal> upDownList = list.stream().map(StockIndexHistoryModel::getUpDown).collect(Collectors.toList());
List<BigDecimal> lastList = list.stream().map(StockIndexHistoryModel::getLast).collect(Collectors.toList());
List<String> typeList = list.stream().map(StockIndexHistoryModel::getType).collect(Collectors.toList());
//创建UpDown的Map
Map<String,BigDecimal> upDownMap = new HashMap<>();
boolean flag1= true;
boolean flag2= true;
for(int i=0;i<2;i++){
for(int j=0;j<list.size();j++){
if(flag1 && flag2){
if(typeList.get(i).equals("IXIC")){
for(int m =i+1;m<list.size();m++){
if(flag2){
if(typeList.get(m).equals("IXIC")){
BigDecimal divide = upDownList.get(i).divide(lastList.get(m),3,BigDecimal.ROUND_HALF_UP);
upDownMap.put("IXIC",divide);
if(upDownMap.get("IXIC")!=null){
flag2=false;
}
}
}
}
}else if(typeList.get(i).equals("DJI")){
for(int n =i+1;n<list.size();n++){
if(flag1){
if(typeList.get(n).equals("DJI")){
BigDecimal divide = upDownList.get(i).divide(lastList.get(n),3,BigDecimal.ROUND_HALF_UP);
upDownMap.put("DJI",divide);
if(upDownMap.get("DJI")!=null){
flag1=false;
}
}
}
}
}
}
}
flag1 =true;
flag2 =true;
}
return upDownMap;
}
public static Map<String, BigDecimal> calculateHkUpDownWeek(List<StockIndexHistoryModel> list) throws ParseException {
//获取list对象的last字段组装成新list
List<BigDecimal> lastList = list.stream().map(StockIndexHistoryModel::getLast).collect(Collectors.toList());
List<String> typeList = list.stream().map(StockIndexHistoryModel::getType).collect(Collectors.toList());
List<BigDecimal> timeList = list.stream().map(StockIndexHistoryModel::getUpdateTime).collect(Collectors.toList());
//创建UpDown的Map
Map<String,BigDecimal> upDownMap = new HashMap<>();
boolean flag2= true;
for(int i=0;i<2;i++){
for(int j=0;j<list.size();j++){
if(flag2){
if(typeList.get(i).equals("HSI")){
for(int m =i+1;m<list.size();m++){
if(flag2){
if(typeList.get(m).equals("HSI")){
if(DateToStamp.getWeek(String.valueOf(timeList.get(m))).equals("星期五")){
BigDecimal subtract = lastList.get(i).subtract(lastList.get(m)).divide(lastList.get(m),3,BigDecimal.ROUND_HALF_UP);
upDownMap.put("HSI",subtract);
if(upDownMap.get("HSI")!=null){
flag2=false;
}
}
}
}
}
}
}
}
}
return upDownMap;
}
@SuppressWarnings("unchecked")
public static Map<String, BigDecimal> calculateChinaUpDownWeek(List<StockIndexHistoryModel> list) throws ParseException {
//获取list对象的last字段组装成新list
List<BigDecimal> lastList = list.stream().map(StockIndexHistoryModel::getLast).collect(Collectors.toList());
List<String> typeList = list.stream().map(StockIndexHistoryModel::getType).collect(Collectors.toList());
List<BigDecimal> timeList = list.stream().map(StockIndexHistoryModel::getUpdateTime).collect(Collectors.toList());
//创建UpDown的Map
Map<String,BigDecimal> upDownMap = new HashMap<>();
boolean flag1= true;
boolean flag2= true;
for(int i=0;i<2;i++){
for(int j=0;j<list.size();j++){
if(flag1 && flag2){
if(typeList.get(i).equals("SSEC")){
for(int m =i+1;m<list.size();m++){
if(flag2){
if(typeList.get(m).equals("SSEC")){
if(DateToStamp.getWeek(String.valueOf(timeList.get(m))).equals("星期五")){
BigDecimal divide = lastList.get(i).subtract(lastList.get(m)).divide(lastList.get(m),3,BigDecimal.ROUND_HALF_UP);
upDownMap.put("SSEC",divide);
if(upDownMap.get("SSEC")!=null){
flag2=false;
}
}
}
}
}
}else if(typeList.get(i).equals("CSI300")){
for(int n =i+1;n<list.size();n++){
if(flag1){
if(typeList.get(n).equals("CSI300")){
if(DateToStamp.getWeek(String.valueOf(timeList.get(n))).equals("星期五")){
BigDecimal divide = lastList.get(i).subtract(lastList.get(n)).divide(lastList.get(n),3,BigDecimal.ROUND_HALF_UP);
upDownMap.put("CSI300",divide);
if(upDownMap.get("CSI300")!=null){
flag1=false;
}
}
}
}
}
}
}
}
flag1 =true;
flag2 =true;
}
return upDownMap;
}
@SuppressWarnings("unchecked")
public static Map<String, BigDecimal> calculateWorldUpDownWeek(List<StockIndexHistoryModel> list) throws ParseException {
//获取list对象的last字段组装成新list
List<BigDecimal> lastList = list.stream().map(StockIndexHistoryModel::getLast).collect(Collectors.toList());
List<String> typeList = list.stream().map(StockIndexHistoryModel::getType).collect(Collectors.toList());
List<BigDecimal> timeList = list.stream().map(StockIndexHistoryModel::getUpdateTime).collect(Collectors.toList());
//创建UpDown的Map
Map<String,BigDecimal> upDownMap = new HashMap<>();
boolean flag1= true;
boolean flag2= true;
for(int i=0;i<2;i++){
for(int j=0;j<list.size();j++){
if(flag1 && flag2){
if(typeList.get(i).equals("IXIC")){
for(int m =i+1;m<list.size();m++){
if(flag2){
if(typeList.get(m).equals("IXIC")){
if(DateToStamp.getWeek(String.valueOf(timeList.get(m))).equals("星期五")){
BigDecimal divide = lastList.get(i).subtract(lastList.get(m)).divide(lastList.get(m),3,BigDecimal.ROUND_HALF_UP);
upDownMap.put("IXIC",divide);
if(upDownMap.get("IXIC")!=null){
flag2=false;
}
}
}
}
}
}else if(typeList.get(i).equals("DJI")){
for(int n =i+1;n<list.size();n++){
if(flag1){
if(typeList.get(n).equals("DJI")){
if(DateToStamp.getWeek(String.valueOf(timeList.get(n))).equals("星期五")){
BigDecimal divide = lastList.get(i).subtract(lastList.get(n)).divide(lastList.get(n),3,BigDecimal.ROUND_HALF_UP);
upDownMap.put("DJI",divide);
if(upDownMap.get("DJI")!=null){
flag1=false;
}
}
}
}
}
}
}
}
flag1 =true;
flag2 =true;
}
return upDownMap;
}
public static void main(String[] args) throws ParseException {
List<StockIndexHistoryModel> list = new ArrayList<>();
StockIndexHistoryModel s1 = new StockIndexHistoryModel(1,new BigDecimal ("4947.75"),new BigDecimal ("3314.03"),new BigDecimal ("3349.05"),new BigDecimal ("3314.03"),"2018年1月2日",new BigDecimal ("1618217381883"),"CSI300",new BigDecimal (-43.42),null,null);
StockIndexHistoryModel s2 = new StockIndexHistoryModel(2,new BigDecimal ("3412.95"),new BigDecimal ("3347.74"),new BigDecimal ("3379.92"),new BigDecimal ("3345.29"),"2018年1月3日",new BigDecimal ("1617897600000"),"SSEC",new BigDecimal (-16.6),null,null);
StockIndexHistoryModel s3 = new StockIndexHistoryModel(3,new BigDecimal ("3450.68"),new BigDecimal ("3371"),new BigDecimal ("3392.83"),new BigDecimal ("3365.3"),"2018年1月4日",new BigDecimal ("1617811200000"),"SSEC",new BigDecimal (-1),null,null);
StockIndexHistoryModel s4 = new StockIndexHistoryModel(4,new BigDecimal ("5035.34"),new BigDecimal ("3386.46"),new BigDecimal ("3402.07"),new BigDecimal ("3380.24"),"2018年1月5日",new BigDecimal ("1617897600000"),"CSI300",new BigDecimal (-2),null,null);
StockIndexHistoryModel s5 = new StockIndexHistoryModel(5,new BigDecimal ("5035.34"),new BigDecimal ("3386.46"),new BigDecimal ("3482.55"),new BigDecimal ("3380.24"),"2018年1月5日",new BigDecimal ("1515081600000"),"SSEC",null,null,null);
StockIndexHistoryModel s6 = new StockIndexHistoryModel(6,new BigDecimal ("5035.34"),new BigDecimal ("3386.46"),new BigDecimal ("5112.21"),new BigDecimal ("3380.24"),"2018年1月5日",new BigDecimal ("1515081600000"),"CSI300",null,null,null);
StockIndexHistoryModel s7 = new StockIndexHistoryModel(7,new BigDecimal ("5035.34"),new BigDecimal ("3386.46"),new BigDecimal ("5112.21"),new BigDecimal ("3380.24"),"2018年1月5日",new BigDecimal ("1515081600000"),"SSEC",null,null,null);
StockIndexHistoryModel s8 = new StockIndexHistoryModel(8,new BigDecimal ("5035.34"),new BigDecimal ("3386.46"),new BigDecimal ("5112.21"),new BigDecimal ("3380.24"),"2018年1月5日",new BigDecimal ("1515081600000"),"CSI300",null,null,null);
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
list.add(s5);
list.add(s6);
list.add(s7);
list.add(s8);
// list.get(0).setUpDownWeek(CalculationUtil.calculateHkUpDownWeek(list).get("HSI"));
// System.out.println(list.get(0).getUpDownWeek());
//计算本周升跌
if(list.get(0).getType().equals("SSEC")){
list.get(0).setUpDownWeek(CalculationUtil.calculateChinaUpDownWeek(list).get("SSEC"));
list.get(1).setUpDownWeek(CalculationUtil.calculateChinaUpDownWeek(list).get("CSI300"));
}else if(list.get(0).getType().equals("CSI300")){
list.get(0).setUpDownWeek(CalculationUtil.calculateChinaUpDownWeek(list).get("CSI300"));
list.get(1).setUpDownWeek(CalculationUtil.calculateChinaUpDownWeek(list).get("SSEC"));
}
List<StockIndexHistoryModel> listTwo = new ArrayList<>();
for(int i=0;i<2;i++){
listTwo.add(list.get(i));
}
for(int i =0;i<2;i++){
System.out.println(listTwo.get(i).getUpDownWeek());
}
}
}
日期转时间戳,时间戳转日期,时间戳转星期的工具类;DateToStamp
package com.simnectzbank.lbs.processlayer.stock.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class DateToStamp {
public static String date2Stamp(String s) throws ParseException {
String res;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
if(s != null && !s.equals("")){
Date date =simpleDateFormat.parse(s);
long ts = date.getTime();
res = String.valueOf(ts);
return res;
}
return s;
}
public static Map<String,String> stamp2Date(String stamp) throws ParseException {
String sd0 ="";
String sd7 ="";
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
if(stamp != null && !stamp.equals("")){
sd0 = sdf.format(new Date(Long.parseLong(stamp)));
Date sd00 = sdf.parse(sd0);//转成data类型的
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(sd00);
c1.add(Calendar.DATE, -8);//一周内的数据,12条
c2.setTime(sd00);
c2.add(Calendar.DATE, 1);//加一天
sd7 = sdf.format(c1.getTime());
sd0 = sdf.format(c2.getTime());
sd0 = date2Stamp(sd0);//转成时间戳 当前时间+1天
sd7 = date2Stamp(sd7);//转成时间戳 当前时间前7天
Map<String,String> map = new HashMap<String, String>();
map.put("sd0",sd0);
map.put("sd7",sd7);
return map;
}else{
Map<String,String> map = new HashMap<String, String>();
map.put("sd0",stamp);
map.put("sd7",stamp);
return map;
}
}
//输入时间戳,输出星期几
public static String getWeek(String stamp) throws ParseException {
String sd0 ="";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
if(stamp != null && !stamp.equals("")){
sd0 = sdf.format(new Date(Long.parseLong(stamp)));
Date sd00 = sdf.parse(sd0);//转成data类型的
SimpleDateFormat sdf2 = new SimpleDateFormat("EEEE");
String week = sdf2.format(sd00);
return week;
}else{
return null;
}
}
public static void main(String[] args) throws ParseException {
// Map<String, String> map = stamp2Date("1618217382172");
// System.out.println( map.get("sd0"));
// System.out.println( map.get("sd7"));
System.out.println(getWeek("1618217382172"));
}
}