Preview怎么调用出来
CSDN话题挑战赛第2期
参赛话题:Java微服务
大家可分享关于Java微服务相关知识,包括但不限于Java微服务开发经验、架构组成、技术交流、中间件等内容,我们鼓励springcloud架构为基础发散出击,从而达到技术积累的目的,快来沉淀自己的技术,一起来分享吧!
你可以从以下几个方面着手(不强制),或者根据自己对话题主题的理解进行创作,参考如下:
Java处理带经纬度的地址 安卓返回的是这样的数据结构
Java处理带经纬度的地址
安卓返回的是这样的数据结构
{
"shop_basic": [
{
"key": "address",
"value": "{\"address\":\"广东省深圳市南山区高新南七道12号惠恒大楼二期1楼米奥卡诺\",\"latitude\":22.534523,\"longitude\":113.947624}"
},
{
"key": "name",
"value": "店铺名字"
},
{
"key": "type",
"value": "1"
},
{
"key": "covered",
"value": "664"
},
{
"key": "rent_month",
"value": "666"
},
{
"key": "shop_type",
"value": "1"
},
{
"key": "open_status",
"value": "1"
}
],
"shop_business": [
{
"key": "rent_day",
"value": "999"
},
{
"key": "property_status",
"value": "1"
}
],
"shop_image": [
{
"key": "door",
"value": "[https://sscm-prod.oss-cn-hangzhou.aliyuncs.com/lego/prod/saas/collect/Screenshot_2021-08-16-15-15-25-555_com.sscm.jpg, https://sscm-prod.oss-cn-hangzhou.aliyuncs.com/lego/prod/saas/collect/Screenshot_2021-08-17-16-29-59-232_com.sscm.jpg, https://sscm-prod.oss-cn-hangzhou.aliyuncs.com/lego/prod/saas/collect/Screenshot_2021-08-16-15-15-25-555_com.sscm.jpg, https://sscm-prod.oss-cn-hangzhou.aliyuncs.com/lego/prod/saas/collect/Screenshot_2021-08-16-15-15-25-555_com.sscm.jpg, https://sscm-prod.oss-cn-hangzhou.aliyuncs.com/lego/prod/saas/collect/Screenshot_2021-08-16-15-15-25-555_com.sscm.jpg]"
}
],
"shop_project": [
{
"key": "renovation",
"value": "88"
},
{
"key": "water_supply",
"value": "1"
},
{
"key": "drainage",
"value": "1"
},
{
"key": "smoke_tube",
"value": "1"
},
{
"key": "fire",
"value": "[]"
}
]
}
我们后台在处理的时候,分析得到只有第一个地址有所区别,其他的都可以统一进行处理
所以我们单独解决带经纬度的地址
如下代码
private void parseBasicLngLatInfo(List<BunkSaveReq> shopBasicList, CollectionShop collectionShop) {
Map<String, String> basicMap = new HashMap<>(16);
if (CollectionUtil.isNotEmpty(shopBasicList)) {
basicMap = shopBasicList.stream().collect(Collectors.toMap(BunkSaveReq::getKey, BunkSaveReq::getValue));
if (null != basicMap.get(CollectShopRequireEnum.ADDRESS.getKey())) {
try {
String address = basicMap.get(CollectShopRequireEnum.ADDRESS.getKey());
JSONObject addressObj = JSONObject.parseObject(address);
Double longitude = Double.valueOf(addressObj.get("longitude").toString());
Double latitude = Double.valueOf(addressObj.get("latitude").toString());
collectionShop.setLongitude(longitude);
collectionShop.setLatitude(latitude);
} catch (Exception e) {
log.info("save: e:{}", e);
}
}
}
}
代码来看看方法重载
1、完整代码
public class OverLoadTest {
public static void main(String[] args) {
OverLoadTest test = new OverLoadTest(); test.getprint(10203,2422424);
}
public void getprint(int i,int j){
System.out.println("1222");
}
public void getprint(String s,int i){
System.out.println("4234");
}
public void getprint(double i,double jdfjkdls){ System.out.println("jfjei2r"); }
public void getprint(double a,int b){ System.out.println("2222222"); }
public void getprint(int a,double b){ System.out.println("the last"); }}
自然默认实现最匹配的int int
2、将int int 注释掉
// public void getprint(int i,int j){
// System.out.println(“1222”);
// }
所报的错误为都匹配,因为 int double和double int 都是同等匹配的方法,系统不知道匹配那个方法,所以报错
3、只留
public void getprint(String s,int i){
System.out.println(“4234”);
}
4、
public void getprint(String s,int i){
System.out.println(“4234”);
}
// public void getprint(double i,double jdfjkdls){
// System.out.println(“jfjei2r”);
// }
public void getprint(double a,int b){
System.out.println(“2222222”);
}
数据结构优化方案
数据结构优化方案
@Override
public Boolean setOrderCustomerServiceStatus(Long id, Integer status) {
LOGGER.info("id:{}, status:{}", id, status);
OrderCustomerService orderCustomerService = orderCustomerServiceMapper.getById(id);
if (null == orderCustomerService) {
throw new OrderException(OrderExceptionResult.ORDER_CUSTOMER_SERVICE_NOT_EXITS);
}
if (OrderConstant.ORDER_CUSTOMER_SERVICE_STATUS_PROCESSED.equals(orderCustomerService.getStatus())) {
LOGGER.info("备注已处理,不能更新");
throw new OrderException(OrderExceptionResult.ORDER_CUSTOMER_SERVICE_STATUS_PROCESSED);
}
if (status.equals(orderCustomerService.getStatus())) {
LOGGER.info("订单备注状态重复");
throw new OrderException(OrderExceptionResult.ORDER_CUSTOMER_SERVICE_STATUS_REPEAT);
}
Date now = DateUtils.getNow();
orderCustomerServiceMapper.setOrderCustomerServiceStatus(id, status, now);
return true;
}
考虑到不同的情况,做一个处理
如不存在
如备注已处理,不能更新
如订单备注状态和前端传入的值一样
以上情况都提示
将被下面代码处理
public enum OrderExceptionResult implements IExceptionResult {
。。。。。
ORDER_CUSTOMER_SERVICE_STATUS_PROCESSED(1025, "订单备注状态已处理"),
ORDER_CUSTOMER_SERVICE_NOT_EXITS(1026, "订单备注不存在"),
ORDER_CUSTOMER_SERVICE_STATUS_REPEAT(1027, "订单备注状态重复"),
;
private int code;
private String msg;
OrderExceptionResult(int code, String msg) {
this.code = code;
this.msg = msg;
}
@Override
public int getCode() {
return code;
}
@Override
public String getMsg() {
return msg;
}
public IExceptionResult buildParamErrorMsg(String paramErrorMsg) {
if (paramErrorMsg == null || "".equals(paramErrorMsg)) {
paramErrorMsg = "";
}
if (this.code == PARAM_ERROR.code) {
this.msg = "参数 " + paramErrorMsg + " 不能为空";
}
return this;
}
Java开发场景多用一些其他更好好用的方法建议
1、集合实现类不一定只用ArrayList、LinkedList
(Vector比较老了就算了)、HashSet、TreeSet、LinkedHashSet、HashMap、TreeMap、LinkedHashMap都可以,特别是Tree开头的。生僻的Hashtable、ConcurrentHashMap也不是不能用
2、jdk 8 新特性能用就尽量用
Lambda
Stream流
if (null != studentMap) {
studentMap.keySet().forEach(o -> {
System.out.println("key = " + o + ", value = " + studentMap.get(o));
});
}
private Map<String, String> getGeoHashHeatMapDataMap(String categoryInfo) {
List<KeyValueData> categoryList = JSONObject.parseArray(categoryInfo, KeyValueData.class);
Map<String, String> map = categoryList.stream()
.collect(Collectors.toMap(KeyValueData::getK, KeyValueData::getV));
return map;
}
3、创建对象
反射
采用clone机制
通过序列化
用newInstance吧
//2 newInstance
try {
Class aClass = Class.forName("basice.Hello");
Hello h2 = (Hello) aClass.newInstance();
h2.sayWorld("newInstance");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
4、数据结构与算法
排序
5、优化多余if else(表达式写法、case等)
电商公司枚举类如下:
package basice;
/**
* @author kegekeqi
* @version 1.0
* @date 2021-12-19 17:32
*/
public enum EleCommerceEnum {
TAOBAO(1, "淘宝"),
PINGDUODUO(2, "拼多多");
Integer id;
String name;
EleCommerceEnum(Integer id, String name) {
this.id = id;
this.name = name;
}
}
if else的方式,如果电商平台越多,代码就越显得冗余:
换成switch case 精简了不少代码
package basice;
/**
* @author kegekeqi
* @version 1.0
* @date 2021-12-19 17:35
*/
public class EleCommerceMain {
public Double count(EleCommerceEnum company, Integer weight) {
switch (company) {
case TAOBAO:
System.out.println(10 + weight * 1.1);
return 10 + weight * 1.1;
case PINGDUODUO:
System.out.println(6 + weight * 1.2);
return 6 + weight * 1.2;
default: throw new IllegalArgumentException("No Data");
}
}
public static void main(String[] args) {
Class aClass = null;
try {
aClass = Class.forName("basice.EleCommerceMain");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
EleCommerceMain h = null;
try {
h = (EleCommerceMain) aClass.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
// EleCommerceMain h = new EleCommerceMain();
h.count(EleCommerceEnum.TAOBAO, 2);
}
}
指针变量
指针变量定义的一般形式:
类型说明符 (*指针变量名)();
函数指针变量是个变量,所有也可以作为参数来用。下面来调用fun1和fun2
#include <stdio.h>
/*int max(int a,int b){
if(a>b) return a;
else return b;
}*/
int fun1(int x); int fun2(int x);
typedef int(*FunType)(int);
void testFunCall(FunType fp,int x);
int main(){
/*int max(int a,int b);
int(*funptr)();
int x,y,z;
funptr = max;
printf("input two numbers:\n");
scanf("%d %d,&x,&y");
z = (*funptr)(x,y);
printf("maxmum=%d",z);
printf("后来\n");*/
testFunCall(fun1,10);
testFunCall(fun2,20);
return 0;
}
void testFunCall(FunType fp,int x){
int t;
t = fp(x);
printf("result:%d\n",t);
}
int fun1(int x){
int t;
t=x*x;
printf("函数fun1的参数为:%d\t返回值为:%d\n",x,t);
return t;
}
int fun2(int x){
int t;
t=(int)sqrt(x);
printf("函数fun2的参数为:%d\t返回值为:%d\n",x,t);
return t;
}