Java使用技巧记录

数字1或者字符1ASCII码为49,字符A的ASCII码为65,字符a的ASCII码为97

1.Java中定义Map常量,List常量

一般方式的使用静态代码块。比如:

 public final static Map map = new HashMap();  
 static {  
     map.put("key1", "value1");  
     map.put("key2", "value2");  
 }  

一种简单定义Map常量的方式

public final static Map<String, Fragment> NAV_ITEM_ADPTER = new HashMap<String, Fragment>() {
    {
        put("拍录传", new CameraFragment());
        put("集群对讲", new GroupTalkFragment());
        put("视通", new VideoCallFragment());
        put("位置", new PositionFragment());
        put("浏览", new BrowseFragment());
        put("消息", new MsgFragment());
        put("群组", new GroupFragment());
        put("设置", null);
        put("退出", null);
    }
};

  

list则可以这样定义:

public final static List<String> LIST = Arrays.asList("one","two","three");

2.LIST 转Map

第一种: 取list中某2个字段作为Map的K,V

   public Map<Long, String> getIdNameMap(List<Account> accounts) {
       return accounts.stream().collect(Collectors.toMap(Account::getId, Account::getUsername));
   }

第二种:将id和实体Bean做为K,V

 public Map<Long, Account> getIdAccountMap(List<Account> accounts) {
     return accounts.stream().collect(Collectors.toMap(Account::getId, account -> account));
 }

或者这样写:

   public Map<Long, Account> getIdAccountMap(List<Account> accounts) {
       return accounts.stream().collect(Collectors.toMap(Account::getId, Function.identity()));
   }

account -> account是一个返回本身的lambda表达式,后面的使用Function接口中的一个默认方法代替,使整个方法更简洁优雅。

第三种: key存在重复记录时处理

   public Map<String, Account> getNameAccountMap(List<Account> accounts) {
       return accounts.stream().collect(Collectors.toMap(Account::getUsername, Function.identity(), (key1, key2) -> key2));
   }

如果使用第一种方法会出错,所以这里只是简单的使用后者覆盖前者来解决key重复问题。

第四种: 使用某个具体的Map类来保存,如保存时使用LinkedHashMap

   public Map<String, Account> getNameAccountMap(List<Account> accounts) {
       return accounts.stream().collect(Collectors.toMap(Account::getUsername, Function.identity(), (key1, key2) -> key2, LinkedHashMap::new));
   }

第五种: List转List<String,Map<String, String>>

类似采购订单 id,对应明细记录。

public Map<String,List<MCode>> getCodeListMap(){
     if(CollectionUtils.isEmpty(codeListMap)){
             List<MCode> codeList = this.getCodeList();
             Set<String> keySet = codeList.stream().map(code -> code.getCodeKbn()).collect(Collectors.toSet());
             Iterator<String> it = keySet.iterator();
             while(it.hasNext()) {
                     String key = it.next();
                     codeListMap.put(key, codeList.stream().filter(code -> code.getCodeKbn().equals(key)).collect(Collectors.toList()));
             }
     }
     return codeListMap;
}

4.实体类与MAp转换

// 将 Map 转换为 实体类
User user = JSON.parseObject(JSON.toJSONString(user01), User.class);
System.out.println(user);
// 将 实体类 转换为 Map
Map map = JSON.parseObject(JSON.toJSONString(user), Map.class);
System.out.println(map);

5.字符串和数组转换

字符串转数组

使用Java split() 方法

split() 方法根据匹配给定的正则表达式来拆分字符串。

注意: . 、 | 和 * 等转义字符,必须得加 \。多个分隔符,可以用 | 作为连字符。

// 字符串转数组  java.lang.String
String str = "0,1,2,3,4,5";
String[] arr = str.split(","); // 用,分割
System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4, 5]

数组转字符串

方法一: 遍历

String[] arr = { "0", "1", "2", "3", "4", "5" };
// 遍历
StringBuffer str5 = new StringBuffer();
for (String s : arr) {
    str5.append(s);
}
System.out.println(str5.toString()); // 012345

方法二: 使用StringUtils的join方法

//数组转字符串 org.apache.commons.lang3.StringUtils
String str3 = StringUtils.join(arr); // 数组转字符串,其实使用的也是遍历
System.out.println(str3); // 012345
String str4 = StringUtils.join(arr, ","); // 数组转字符串(逗号分隔)(推荐)
System.out.println(str4); // 0,1,2,3,4,5

方法三: 使用ArrayUtils的toString方法

// 数组转字符串 org.apache.commons.lang3.ArrayUtils
String str2 = ArrayUtils.toString(arr, ","); // 数组转字符串(逗号分隔,首尾加大括号)
System.out.println(str2); // {0,1,2,3,4,5}

由于无法解释的神圣旨意,我们徒然地到处找你;你就是孤独,你就是神秘,比恒河或者日落还要遥远。。。。。。
原文地址:https://www.cnblogs.com/momoli/p/15765807.html