常见问题整理

导读:本篇文章讲解 常见问题整理,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

文章目录

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

(1)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!