----------------------------------------------------------------------
> 遍历list 移除当前的某个
private void removeNoRelProd(List
if (data != null) {
for (Iterator
EventMergeDto dto = it.next();
if (dto.getProds() == null || dto.getProds().isEmpty()) {
it.remove();
}
}
}
}
----------------------------------------------------------------------
> 遍历Map
private String appendParam(String url, Map
StringBuilder sbuilder = new StringBuilder(url);
for (Map.Entry
sbuilder.append(entry.getKey());
sbuilder.append("=");
sbuilder.append(entry.getValue());
sbuilder.append("&");
}
}
----------------------------------------------------------------------
> 属性复制 spring-beans包
org.springframework.beans.BeanUtils
BeanUtils.copyProperties(nt, ntd);
----------------------------------------------------------------------
> 利用cache做搜索 guava包
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
public static Cache
List
try {
data = cache.get("", () -> loadBaseStock());
}catch(Exception e) {
data = baseStockDao.findAll();
}
data = data.stream().filter(v -> v.getAbbr_szh().contains(name) || v.getCode().contains(name)).collect(Collectors.toList());
----------------------------------------------------------------------
> 取list集合对象中的某一个属性的最大值最小值
List
// 最大年份
Integer maxyear = Collections.max(result, new Comparator
@Override
public int compare(RelationStock o1, RelationStock o2) {
return (o1.getYear() < o2.getYear() ? -1 : (o1.getYear() == o2.getYear() ? 0 : 1));
}
}).getYear();
logger.info("最大年份:" + maxyear);
// 最小年份
Integer minyear = Collections.max(result, new Comparator
@Override
public int compare(RelationStock o1, RelationStock o2) {
return (o1.getYear() > o2.getYear() ? -1 : (o1.getYear() == o2.getYear() ? 0 : 1));
}
}).getYear();
logger.info("最小年份:" + minyear);
----------------------------------------------------------------------
System.out.println(Pattern.matches("(.*?)\\.(\\w+)", ".雷.A"));
java.util
Map
List
----------------------------------------------------------------------
> list 排序
public static void main(String[] args) {
String sort = "1";
List
// 排序方式一
resultList1.sort(new Comparator
@Override
public int compare(EventMergeDto o1, EventMergeDto o2) {
if((sort).equals("1")){
return o2.getWeight().compareTo(o1.getWeight());
}else if((sort).equals("2")){
return o2.getHeat().compareTo(o1.getHeat());
}else if((sort).equals("3")){
return o2.getTread().compareTo(o1.getTread());
}
return o2.getWeight().compareTo(o1.getWeight());
}
});
// 排序方式二
resultList1.sort((o1,o2)->o2.getWeight().compareTo(o1.getWeight()));
// 排序方式三
resultList1 = resultList1.stream().sorted((o1,o2)->o2.getWeight().compareTo(o1.getWeight())).collect(Collectors.toList());
// 排序方式四
Collections.sort(resultList1, new Comparator
@Override
public int compare(EventMergeDto o1, EventMergeDto o2) {
// 权重倒倒叙排序
int compare = o2.getWeight().compareTo(o1.getWeight());
if(compare == 0){
// 热度倒叙排序
return o2.getHeat().compareTo(o1.getHeat());
}
return compare;
}
});
// 排序
Collections.sort(data, new Comparator
@Override
public int compare(RelationStock o1, RelationStock o2) {
// 年份降序排序
int compare = o2.getFp().compareTo(o1.getFp()); // 正数是正序 负数是倒叙 因为是o2写在前面 所以是返回倒叙的
if(compare == 0){
// 收入降序排序
if("NA".equals(o2.getValue())){
o2.setValue("0");
}if("NA".equals(o1.getValue())){
o1.setValue("0");
}
return new BigDecimal(o2.getValue()).subtract( new BigDecimal(o1.getValue())).intValue();
}
return compare;
}
});
}
----------------------------------------------------------------------
> List.stream().filter
filter: 对于Stream中包含的元素使用给定的过滤函数进行过滤操作,新生成的Stream只包含符合条件的元素;
// tream当成一个高级版本的Iterator。
public static void main(String[] args){
// 获取一个List中,元素大于2017-11-05数
List
String from = "2017-11-05";
List
System.out.println(dataList);
// 获取一个List中,元素不为null的个数
List
long count = nums.stream().filter(num -> num != null).count();
System.out.println(count);
List
}
----------------------------------------------------------------------
> Objects用法
java.utiil.Objects
List
ProductRs.Ind csf = waitInd.stream().filter(v -> Objects.equals(v.getT(), "csf")).findFirst().orElse(null);
import java.util.Objects;
corpus.setCrt(Objects.isNull(exist) ? new Date() : exist.getCrt());
if (Objects.nonNull(corpus.getType())) {}
----------------------------------------------------------------------
> 随机数
System.out.println((int)((Math.random()*9+1)*100000));// 随机6位数
System.out.println((int)((Math.random()*9+1)*1000000));// 随机7位数
System.out.println((int)((Math.random()*9+1)*10000000));// 随机8位数
----------------------------------------------------------------------
> double 数字标准化 逗号分隔
// import java.math.BigDecimal;
// import java.text.DecimalFormat;
Double val = 11789.30;
DecimalFormat decimalformat = new DecimalFormat("###,###.##");
System.out.println(decimalformat.format(val));// 11,789.3
----------------------------------------------------------------------
> list :: 用法
List
List
System.out.println(eventIdSet); // []
newArrayList.stream().forEach(eventIdSet::add);
System.out.println(eventIdSet); // [2015, 2014, 2013, 2018]
----------------------------------------------------------------------
StringUtils.equals(DatashiftConstants.TYPE_UPDATE, jobParameter.getType())
Strings.isNullOrEmpty(lv)
----------------------------------------------------------------------
> 判断map是否为空
import org.apache.commons.collections.MapUtils;
Map
MapUtils.isNotEmpty(quarterCacheMap)
----------------------------------------------------------------------
> sql in 拼写
// import org.apache.commons.lang.StringUtils;
public static void main(String[] args) {
List
System.out.println(String.join(",", conceptIds));// 1212,69437hfuit,32ui,iu3i
// 或 StringUtils.join(conceptIds,",")
List
String sql = "select * from nlp_en where textid in" + "('"+StringUtils.join(sids,"','")+"')";
System.out.println(sql);// select * from nlp_en where textid in('1212','69437hfuit','32ui','iu3i')
}
----------------------------------------------------------------------
>List转map
map方法 用于需要对一个流中的值进行某种形式的转换
List
Map
或
Map
或
Map
> toList
List
> toSet
Set
----------------------------------------------------------------------
>List 去重
//方式一
List
System.out.println(list);
list = list.stream().distinct().collect(Collectors.toList());
System.out.println(list);
//方式二
List
// 根据title去重
Set
newSet.addAll(news);
news = new ArrayList<>(newSet);
//方式三
List
Set
for(Iterator
Person a = it.next();
if (listTemp.contains(a.getName())) {
it.remove();
} else {
listTemp.add(a.getName());
}
}
//方式四
List
Set
persons.forEach((one)->{
String title = one.getName().trim();
if(!set.contains(title)){
set.add(title);
disPer.add(one);
}
});
persons = disPer;
----------------------------------------------------------------------
> Optional介绍
Optional是Java8新加入的一个容器,这个容器只存1个或0个元素,它用于防止出现NullpointException,它提供如下方法:
isPresent()
判断容器中是否有值。
ifPresent(Consume lambda)
容器若不为空则执行括号中的Lambda表达式。
T get()
获取容器中的元素,若容器为空则抛出NoSuchElement异常。
T orElse(T other)
获取容器中的元素,若容器为空则返回括号中的默认值。
BasicDBList items = Optional.ofNullable((BasicDBList) dbObject.get("items")).orElse(new BasicDBList());
----------------------------------------------------------------------
>时间
/**
* import java.time.LocalTime;
* import java.time.format.DateTimeFormatter;
*/
public static void main(String[] args) throws ParseException {
DateTimeFormatter CLNHHMM = DateTimeFormatter.ofPattern("HH:mm");
LocalTime time = LocalTime.parse("16:25", CLNHHMM);
System.out.println(time);
System.out.println(Optional.ofNullable(time)); // 16:25
List
// time不为空的话,放入 java.util.Optional;
Optional.ofNullable(time).ifPresent(t -> {
crons.add(String.format("0 %d %d * * ?", t.getHour(), t.getMinute()));
});
System.out.println(crons);
LocalDateTime ldt_current= LocalDateTime.now();
System.out.println(ldt_current); // 2017-11-27T11:27:51.702
LocalDateTime ldt_before = ldt_current.plusHours(-24);
System.out.println(ldt_before); // 2017-11-26T11:27:51.702
String curr_format = ldt_current.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
String before_format = ldt_before.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
System.out.println(curr_format); // 2017-11-27 11:27:51.702
System.out.println(before_format); // 2017-11-26 11:27:51.702
}
>时间
import java.time.LocalDate; // jdk
LocalDate 只有年月日
LocalTime 精准的时分秒
LocalDateTime 年月日时分秒都有
LocalDate today = LocalDate.now(); // 2017-10-25
LocalDate tomorrow = today.plusDays(1); // 2017-10-26
String st = String.join(" ",today.toString(),"00:00:00"); // 2017-10-25 00:00:00
String et=String.join(" ",tomorrow.toString(),"00:00:00"); // 2017-10-26 00:00:00
----------------------------------------------------------------------
public static Date getDate(Integer interval) {
if (interval != null) {
LocalDateTime n = LocalDateTime.of(LocalDate.now(), LocalTime.of(0, 0));
if (interval.equals(RECENTWEEK.interval)) {
n = n.minusWeeks(1);
}
if (interval.equals(RECENTMONTH.interval)) {
n = n.minusWeeks(1);
}
return Date.from(n.atZone(ZoneId.systemDefault()).toInstant());
}
return null;
}
----------------------------------------------------------------------
> 当前时间往前退一个月的时间
Date trdt = new Date();
String startDt = DateUtil.formatDate(DateUtils.addMonths(trdt, -1), "yyyyMMdd");
----------------------------------------------------------------------
>BigDecimal 保留小数位数 四舍五入
/**
* 保留小数位数 四舍五入
* @param val 值 scale 保留几位
*/
public static Double scale(Double val, int scale){
if(val == null || val.isInfinite() || val.isNaN()) {
return 0d;
}
BigDecimal bg = new BigDecimal(val);
//进行四舍五入 然后保留多少位
return bg.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
----------------------------------------------------------------------
> bigDecimal 相加
BigDecimal g = new BigDecimal(1.236d);
g = g.add(new BigDecimal(0.5d));
g = g.add(new BigDecimal(0.5d));
System.out.println(g.doubleValue());
----------------------------------------------------------------------
>利用正则表达式校验
private static boolean filterSecu(String cd) {
String regex = "^(6.*SH_EQ)|((0|3).*SZ_EQ)$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(cd);
boolean find = matcher.find();
return find;
}
String time = "20160406150519";
Pattern pattern = Pattern.compile("^[0-9]{8}15[0-9]{4}");
if(pattern.matcher(time).matches()) {
return time.substring(0, 8) + "150000";
System.out.println("当前匹配");
}else{
System.out.println("当前不匹配");
}
//验证是否为空
StringUtils.isNotBlank("");
----------------------------------------------------------------------
>判断集合是否为空
//
//
//
//
//
import org.apache.commons.collections.CollectionUtils;
List datas = 。。。。。。;
if(CollectionUtils.isEmpty(datas)) {
continue;
}
//判断集合不为空
if(CollectionUtils.isNotEmpty(updateEntities)) {
updateData(updateEntities);
entities = removeAll(entities, updateEntities);
}
----------------------------------------------------------------------
> 将逗号分隔的String 装换成list
private List
List
if(StringUtils.isBland(keys)){
list = Arrays.asList(keys.split(","));
}
}
----------------------------------------------------------------------
>清除Map中的数据
public static Map
syncHqIndex.remove("");
>清除List中的数据
public static List
clearSecus.clear();
----------------------------------------------------------------------
数组实现
Arrays.asList("1001","1002","1003","1008","1005","1054","1055","1012")
List
import com.google.common.collect.Lists;
Lists.newArrayList("1001,1002,1003,1012".split(","))
----------------------------------------------------------------------
private String getKey(String... args) {
StringBuilder sb = new StringBuilder();
for (String s : args) {
sb.append(s);
}
return sb.toString();
}
----------------------------------------------------------------------
>校验集合是否为空
import org.apache.commons.collections.CollectionUtils;
BasicDBList orList = new BasicDBList();
CollectionUtils.isEmpty(orList)
----------------------------------------------------------------------
>校验数数据是否为空
import org.apache.commons.lang3.StringUtils;
StringUtils.isBlank("")
校验数据不为空
StringUtils.isNotBlank("");
String[] arr = str.split(splitor);
List
for(String s : arr){
if(StringUtils.isNotEmpty(s)){
list.add(s);
}
}
----------------------------------------------------------------------
>switch case 用法
// 根据股票类型取相应记录
public Set
Set
switch (secuType) {
case Constants.SECU_A:
secus = baseProfileBiz.getSecusByMarket(BaseConstants.MARKET_A, null, null);
break;
case Constants.SECU_ABROAD:
secus = baseProfileBiz.getSecusByMarket("H,US", null, null);
break;
default:
break;
}
return secus;
}
----------------------------------------------------------------------
> 枚举
package com.csf.tag.common.enums;
public enum StateEnum {
// 删除状态
DELETE(0),
// 系统生成
ADD_BY_SYSTEM(1),
// 人工维护
ADD_BY_HAND(2);
private int value;
StateEnum(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
----------------------------------------------------------------------
->枚举 switch case 用法
public enum DictDownloadType {
ENTITY(1,"实体"), INDUSTRY(9,"行业");
public Integer key;
public String dsc;
private DictDownloadType(Integer key, String dsc){
this.key = key;
this.dsc = dsc;
}
public static DictDownloadType get(Integer key){
DictDownloadType[] values = DictDownloadType.values();
for(DictDownloadType object : values){
if(object.key == key){
return object;
}
}
return null;
}
}
public void txtMessasge(Integer number) throws Exception{
DictDownloadType downtype = DictDownloadType.get(number);
switch(downtype){
case ENTITY:txtWriteEntity(out, query, number, cacheKey, speed);break;//实体
case INDUSTRY:txtWriteIndustry(out, query, number, cacheKey, speed);break;//行业
}
}
----------------------------------------------------------------------
验证数据
public static boolean isAEquity(String code) {
if (StringUtils.isBlank(code)) return false;
boolean flag = false;
Pattern p = Pattern.compile("^(6.*SH_EQ|(0|3).*SZ_EQ)$");
Matcher m = p.matcher(code);
if (m.matches())
flag = true;
return flag;
}
----------------------------------------------------------------------
>使用System.arraycopy()实现数组之间的复制
System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制。其函数原型是:
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
src:源数组; srcPos:源数组要复制的起始位置; dest:目的数组; destPos:目的数组放置的起始位
置; length:复制的长度。 注意:src and dest都必须是同类型或者可以进行转换类型的数组. 有趣
的是这个函数可以实现自己到自己复制,比如: int[] fun ={0,1,2,3,4,5,6};
System.arraycopy(fun,0,fun,3,3); 则结果为:{0,1,2,0,1,2,6}; 实现过程是这样的,先生成一个长
度为length的临时数组,将fun数组中srcPos 到srcPos+length-1之间的数据拷贝到临时数组中,再执行
System.arraycopy(临时数组,0,fun,3,3)
如:
// remove one item from array
private static String[] removeItemFromArray(String[] array, int index) {
int length = array.length;
Object result = Array.newInstance(array.getClass().getComponentType(), length - 1);
System.arraycopy(array, 0, result, 0, index);
if (index < length - 1) {
System.arraycopy(array, index + 1, result, index, length - index - 1);
}
return (String[]) result;
}
----------------------------------------------------------------------
//验证
import org.springframework.util.Assert;
Assert.notNull(rse, "ResultSetExtractor must not be null");
----------------------------------------------------------------------
Map
Collection c = map.values();
----------------------------------------------------------------------
>Map遍历
Map
// 遍历 secuIdMap, 用orgId 作为中介, 从 orgInfoMap 中取机构名称等
for (Map.Entry
String secu = entry.getKey();
String orgId = entry.getValue();
secuInfoMap.put(secu, orgInfoMap.get(orgId));
}
private static BasicDBObject prepareDBObject(LinkedHashMap
BasicDBObject dbObj = new BasicDBObject();
Set
for (String key : s) {
dbObj.put(key, map.get(key));
}
return dbObj;
}
----------------------------------------------------------------------
> map 分组
public static void main(String[] args) {
List
list.add(new EventNewsCon("1", "698", new Date(),new Date()));
list.add(new EventNewsCon("1", "25478", new Date(),new Date()));
list.add(new EventNewsCon("1", "25478", new Date(),new Date()));
list.add(new EventNewsCon("21", "698", new Date(),new Date()));
list.add(new EventNewsCon("21", "12014", new Date(),new Date()));
// 分组 方式一
Map
list.forEach((one)->{
List
if(CollectionUtils.isEmpty(va)){
va = Lists.newArrayList();
collect0.put(one.getEvent_id(), va);
}
va.add(one);
});
System.out.println(collect0);
// 分组 方式二
Map
System.out.println(collect);
Map
// 分组 方式三
Map
.collect(Collectors.groupingBy(k->k.getEvent_id(),Collectors.mapping(v->v,Collectors.toList())));
System.out.println(collect1);
// 分组 {1=[698, 25478, 25478], 21=[698, 12014]}
Map
.collect(Collectors.groupingBy(k->k.getEvent_id(),Collectors.mapping(v->v.getNews_id(),Collectors.toList())));
System.out.println(collect2);
// 分组 value进行去重 {1=[698, 25478], 21=[698, 12014]}
Map
.collect(Collectors.groupingBy(k->k.getEvent_id(),Collectors.mapping(v->v.getNews_id(),Collectors.toSet())));
System.out.println(collect3);
}
----------------------------------------------------------------------
> map分组 对每组求和
// Stream的map和flatMap的区别: map会将一个元素变成一个新的Stream 但是flatMap会将结果打平,得到一个单个元素
// 分组 ,对每组求和
ReportAnalyseDetail t = new ReportAnalyseDetail();
List
Map
Map
Set
Set
// 按照eq_feed_id分组并统计其数量
Map
----------------------------------------------------------------------
>list遍历
@SuppressWarnings("unchecked")
private static List
Set
Map
List
Map
entrys.stream().forEach((entry) -> result.put(entry.getKey(), entry.getValue()));
----------------------------------------------------------------------
>利用StringUtils.join()方法拼接字符串
import org.apache.commons.lang.StringUtils;
List
results.add(buildResultString("secu", "rpt", "item_cd", "current period", "current value", "unit",
"previous period", "previous value", "unit", "ratio"));
public static String buildResultString(String... fields){
return StringUtils.join(fields, ",");
}
StringUtils.join(strings, separator);
----------------------------------------------------------------------
> 字符串时间比较大小
String dt = "";
String oneDt = "";
if(oneDt.compareTo(dt)<0){
System.out.println("说明oneDt < dt");
}
----------------------------------------------------------------------
> map 初始化
/**
* HashMap 是没有顺序的;LinkedHashMap 是有顺序的
*/
public static final Map
private static final long serialVersionUID = -1454726433772295097L;
{
put("新加坡证券交易所第一股东", "新加坡证券交易所");
put("深圳证券交易所主板A股", "深交所主板");
put("纳斯达克证券交易所全球精选市场", "美国NASDAQ证券交易所");
put("上海证券交易所A股", "上交所");
put("深圳证券交易所中小企业板", "深交所中小板");
}
};
public static void main(String[] args) {
for(String s : MARKETMAP.keySet()){
System.out.println(s+"="+MARKETMAP.get(s));
}
System.out.println("*******************************************************");
Map
map.put("新加坡证券交易所第一股东", "新加坡证券交易所");
map.put("深圳证券交易所主板A股", "深交所主板");
map.put("纳斯达克证券交易所全球精选市场", "美国NASDAQ证券交易所");
map.put("上海证券交易所A股", "上交所");
map.put("深圳证券交易所中小企业板", "深交所中小板");
for(String s : map.keySet()){
System.out.println(s+"="+map.get(s)+" ");
}
}
----------------------------------------------------------------------
> List 进行截取多少个
public static void main(String[] args) {
// 方式一
List
list.add("a");list.add("b");list.add("c");
list.add("d");list.add("e");list.add("f");
list.add("g");list.add("h");
// [a, b, c] [d, e] [f, g] list 的subList默认有一个规则,接取是 包含头,不包含尾部, 最有要加上最后的
System.out.println(list.subList(0, 3) + " "+ list.subList(3, 5) + " " + list.subList(5, list.size()-1));
String idx50Code = list.subList(0, 3).toString();
System.out.println(idx50Code);
System.out.println(idx50Code.substring(1,idx50Code.length()-1));
// 方式二
List
int offset = 25;
int limit = 20;
result.subList(offset, Math.min(offset+=limit, result.size()))
// 方式三
List
System.out.println(list);
list = list.stream().limit(3).collect(Collectors.toList());
System.out.println(list);
list = list.stream.skip(3)limit(6).collect(Collectors.toList());
List
int total = list.size();
int pos = 0;
while (pos < total)
List
}
}
----------------------------------------------------------------------
> 数据拼接
String header = String.format("%s,%s,%s,%s,%s,%s",
new Object[]{"时间","tick","主力流入","主力流出","小单流入","小单流出"});
System.out.println(header);
//输出结果为 : 时间,tick,主力流入,主力流出,小单流入,小单流出
String.format("0 %d %d * * ?", "16", "25")
//输出结果为: 0 16 25 * * ?
----------------------------------------------------------------------