文章目录
1.两个集合合并操作
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private String name;
private Integer age;
private String address;
}
public static void main(String[] args) {
Map<String,Student> map1 = new HashMap<>();
map1.put("A",new Student("张三",20,"北京"));
map1.put("B",new Student("张三",30,"北京"));
map1.put("B",new Student("李四",30,"北京"));
Map<String,Student> map2 = new HashMap<>();
map2.put("B",new Student("王五",40,"北京"));
map2.put("D",new Student("王五",30,"北京"));
map2.put("E",new Student("赵六",30,"北京"));
// 合并
Map<String, Student> mergeMap = new HashMap();
mergeMap.putAll(map1);
mergeMap.putAll(map2);
for(Map.Entry<String,Student> entry : mergeMap.entrySet()){
System.out.println(entry.getKey()+" "+entry.getValue());
}
}
执行结果如下:
A Student(name=张三, age=20, address=北京)
B Student(name=王五, age=40, address=北京)
D Student(name=王五, age=30, address=北京)
E Student(name=赵六, age=30, address=北京)
以上通过结果可以分析出:
- 因为map集合key不能重复,所以map1中相同的key会覆盖。
- 合并操作时,map1与map2中都有相同的key,后面的key替换前面的key。即旧值会被新值替换。
2.两个集合合并
@Data
public class Trade {
private String seatId;
private String seatName;
private Integer tradedate;
private BigDecimal tradeAmountXT;
private BigDecimal tradeAmountHS;
}
public class ListTradeTest {
public static void main(String[] args) {
List<Trade> list1 = new ArrayList<>();
Trade trade1 = new Trade();
trade1.setSeatId("1");
trade1.setSeatName("兴业证券_上交所");
trade1.setTradedate(20220301);
trade1.setTradeAmountXT(new BigDecimal(100));
Trade trade2 = new Trade();
trade2.setSeatId("2");
trade2.setSeatName("兴业证券_深交所");
trade2.setTradedate(20220301);
trade2.setTradeAmountXT(null);
Trade trade3 = new Trade();
trade3.setSeatId("3");
trade3.setSeatName("中信建投_上交所");
trade3.setTradedate(20220301);
trade3.setTradeAmountXT(new BigDecimal(300));
Trade trade4 = new Trade();
trade4.setSeatId("4");
trade4.setSeatName("中信建投_深交所");
trade4.setTradedate(20220301);
trade4.setTradeAmountXT(new BigDecimal(400));
list1.add(trade1);
list1.add(trade2);
list1.add(trade3);
list1.add(trade4);
List<Trade> list2 = new ArrayList<>();
Trade trade5 = new Trade();
trade5.setSeatId("1");
trade5.setSeatName("兴业证券_上交所");
trade5.setTradedate(20220301);
trade5.setTradeAmountHS(new BigDecimal(100));
Trade trade6 = new Trade();
trade6.setSeatId("2");
trade6.setSeatName("兴业证券_深交所");
trade6.setTradedate(20220301);
trade6.setTradeAmountHS(new BigDecimal(201));
Trade trade7 = new Trade();
trade7.setSeatId("7");
trade7.setSeatName("申万宏源_上交所");
trade7.setTradedate(20220301);
trade7.setTradeAmountHS(new BigDecimal(300));
Trade trade8 = new Trade();
trade8.setSeatId("8");
trade8.setSeatName("申万宏源_深交所");
trade8.setTradedate(20220301);
trade8.setTradeAmountHS(new BigDecimal(400));
list2.add(trade5);
list2.add(trade6);
list2.add(trade7);
list2.add(trade8);
System.out.println(list1);
System.out.println(list2);
Collection union = CollectionUtils.union(list1, list2);
System.out.println(union);
Map<String,Trade> map1 = list1.stream().collect(Collectors.toMap(Trade::getSeatName,item -> {return item;}));
System.out.println(map1);
Map<String,Trade> map2 = list2.stream().collect(Collectors.toMap(Trade::getSeatName,item -> {return item;}));
System.out.println(map2);
Set<String> set1 = map1.keySet();
Set<String> set2 = map2.keySet();
Set<String> differSet = Sets.union(set1,set2);
System.out.println(differSet);
Map<String, Trade> result = Maps.newHashMap();
List<Trade> listResult = new ArrayList<>();
for (String key : differSet) {
Trade t = new Trade();
if (map1.containsKey(key)) {
t.setSeatName(map1.get(key).getSeatName());
t.setSeatId(map1.get(key).getSeatId());
t.setTradeAmountXT(map1.get(key).getTradeAmountXT());
t.setTradedate(map1.get(key).getTradedate());
}
if(map2.containsKey(key)){
t.setSeatName(map2.get(key).getSeatName());
t.setSeatId(map2.get(key).getSeatId());
t.setTradeAmountHS(map2.get(key).getTradeAmountHS());
t.setTradedate(map2.get(key).getTradedate());
}
listResult.add(t);
}
System.out.println(listResult);
}
}
3.LocalDateTime与String相互转换
public static void main(String[] args) {
//Java8的DateTimeFormatter是线程安全的,而SimpleDateFormat并不是线程安全。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.now();
String localTimeStr = df.format(localDateTime);
LocalDateTime ldt = LocalDateTime.parse("2022-02-17 09:58:31",df);
System.out.println("LocalDateTime转成String类型的时间:"+localTimeStr);
System.out.println("String类型的时间转成LocalDateTime:"+ldt);
}
执行结果:
LocalDateTime转成String类型的时间:2022-02-17 09:59:01
String类型的时间转成LocalDateTime:2022-02-17T09:58:31
4.Map集合遍历方式
public class TestMapFor {
public static void main(String[] args) {
test01();
test02();
test03();
test04();
test05();
test06();
test07();
}
//迭代器entrySet
//entrySet的性能比keySet的性能高出了一倍之多,因此我们应该尽量使用entrySet来实现Map集合的遍历。
public static void test01(){
Map<Integer, String> map = new HashMap();
map.put(1,"java");
map.put(2,"jdk");
map.put(3,"javascript");
map.put(4,"jquery");
map.put(5,"jconsole");
Iterator<Map.Entry<Integer, String>> iterator = map.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<Integer, String> entry = iterator.next();
Integer key = entry.getKey();
String value = entry.getValue();
System.out.println("key = "+key+","+"value = "+value);
}
}
//迭代器KeySet
public static void test02(){
Map<Integer, String> map = new HashMap();
map.put(1,"java");
map.put(2,"jdk");
map.put(3,"javascript");
map.put(4,"jquery");
map.put(5,"jconsole");
Iterator<Integer> iterator = map.keySet().iterator();
while (iterator.hasNext()){
Integer key = iterator.next();
String value = map.get(key);
System.out.println("key = "+key+","+"value = "+value);
}
}
//ForEach EntrySet
public static void test03(){
Map<Integer, String> map = new HashMap();
map.put(1,"java");
map.put(2,"jdk");
map.put(3,"javascript");
map.put(4,"jquery");
map.put(5,"jconsole");
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println("key = "+entry.getKey()+",value = "+entry.getValue());
}
}
//ForEach KeySet
public static void test04(){
Map<Integer, String> map = new HashMap();
map.put(1,"java");
map.put(2,"jdk");
map.put(3,"javascript");
map.put(4,"jquery");
map.put(5,"jconsole");
for (Integer key : map.keySet()) {
System.out.println("key = "+key+","+"value = "+map.get(key));
}
}
//Lambda
public static void test05(){
Map<Integer, String> map = new HashMap();
map.put(1,"java");
map.put(2,"jdk");
map.put(3,"javascript");
map.put(4,"jquery");
map.put(5,"jconsole");
map.forEach((key,value) -> {
System.out.println("key = "+key+","+"value = "+value);
});
}
//Streams API 单线程
public static void test06(){
Map<Integer, String> map = new HashMap();
map.put(1,"java");
map.put(2,"jdk");
map.put(3,"javascript");
map.put(4,"jquery");
map.put(5,"jconsole");
map.entrySet().stream().forEach(entry ->{
System.out.println("key = "+entry.getKey()+","+"value = "+entry.getValue());
});
}
//Streams API 多线程
public static void test07(){
Map<Integer, String> map = new HashMap();
map.put(1,"java");
map.put(2,"jdk");
map.put(3,"javascript");
map.put(4,"jquery");
map.put(5,"jconsole");
map.entrySet().parallelStream().forEach(entry ->{
System.out.println("key = "+entry.getKey()+","+"value = "+entry.getValue());
});
}
}
5.git回退版本操作(亲测有效)
方法一:(测试成功)
#查看当前分支
git branch
# 切换到要恢复的分支上
git checkout [分支名]
# 查看历史版本,找到要恢复的版本号
git reflog
# 将本地代码回退到指定版本
git reset --hard [版本号]
HEAD is now at d580ea7da add a constellation test case
#此时本地文件已经回滚到刚刚commit d580ea7dab097d8ea6d658adbc7e9d57ef22669a之后的状态,但是服务器仍然没有改变,需要继续远程回滚:
# 将本地代码强制提交,覆盖远程git服务器的代码
git push -f
# 这种方式比较暴力,会覆盖远端服务器的代码,删除掉已经提交的分支代码信息,建议使用第二种方法
方法二:(测试未成功)
# 切换到要恢复的分支上
git checkout [分支名]
# 查看历史版本,找到要恢复的版本号
git reflog
# 使用revert进行回退
git revert [commit id] -n -m 1
# 参数说明
-n 不自动合并
-m 是指使用develop分支上merge之前的commit
1 代表develop合并了其他分支2,现在要回退的是develop分支,所以为1
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/1427.html