一个Bug的反思

简介: 对输入数据判重,使用Map,将对象作为Key,使用map的containsKey方法来着重是否是重复记录。正常的处理流程:(1)将输入的数据封装成对象(2)判重,将没有重复的数据存储到map(3)对没有重复的数据,进行校验(4)将部分输入的数据,转换成数据库存储时的格式 问题:因为对已经存储在map中的对象中的字段进行了修改,即使后面的输入的对象与前一个重复,判重就会失效。

对输入数据判重,使用Map,将对象作为Key,使用map的containsKey方法来着重是否是重复记录。
正常的处理流程:
(1)将输入的数据封装成对象
(2)判重,将没有重复的数据存储到map
(3)对没有重复的数据,进行校验
(4)将部分输入的数据,转换成数据库存储时的格式

问题:因为对已经存储在map中的对象中的字段进行了修改,即使后面的输入的对象与前一个重复,判重就会失效。
反思:
这个逻辑的流程是:(1)得到输入--》(2)判重--》(3)将部分字段的值更改成数据库存储的值--》(4)持久化
第三部,更改了对象的值,因为会导致判重的预期失效,见下例子

import java.util.HashMap;
import java.util.Map;

/*2015-9-20*/
public class MapDemo {
    public static void main(String[] args) {
        Map<Person, String> info = new HashMap<Person, String>();
        Person person = new Person("xiaoming", 1);
        info.put(person, person.getName());
        print(info, person);
        person.setSalary(2);
        System.out.println(String.format("Get a pay raise:%d to %d", 1, 2));
        print(info, person);
        person = new Person("xiaoming", 1);
        print(info, person);
    }

    private static void print(Map<Person, String> info, Person person) {
        System.out.println(String.format("get '%s' from '%s'.Result: '%s'", person, info, info.get(person)));
    }

}

class Person {
    private String name;
    private int salary;

    public Person(String name, int salary) {
        super();
        this.name = name;
        this.salary = salary;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getSalary() {
        return salary;
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", salary=" + salary + "]";
    }

}

Output:

get 'Person [name=xiaoming, salary=1]' from '{Person [name=xiaoming, salary=1]=xiaoming}'.Result: 'xiaoming'
Get a pay raise:1 to 2
get 'Person [name=xiaoming, salary=2]' from '{Person [name=xiaoming, salary=2]=xiaoming}'.Result: 'xiaoming'
get 'Person [name=xiaoming, salary=1]' from '{Person [name=xiaoming, salary=2]=xiaoming}'.Result: 'null'

 

相关文章
|
15天前
|
SQL 运维 Java
记一个折磨了我一天半的 Bug
一杯茶,一根烟,一个 Bug 一天根本改不完。
28 1
|
5月前
|
XML SQL 前端开发
Bug积累
Bug积累
44 1
|
编解码 前端开发 测试技术
【软件测试】测试&开发的一生之敌-BUG
BUG相比大家都知道,程序运行出错或者与预期不符就是BUG.现在我们来用测试人员的角度来看待BUG。
|
缓存 JavaScript 小程序
接手前同事代码,特别烂,各种BUG,看麻了。。。
接手前同事代码,特别烂,各种BUG,看麻了。。。
|
存储 算法 Java
10 个让人头疼的 bug
那个谁,今天又写 bug 了,没错,他说的好像就是我。。。。。。 作为 Java 开发,我们在写代码的过程中难免会产生各种奇思妙想的 bug ,有些 bug 就挺让人无奈的,比如说各种空指针异常,在 ArrayList 的迭代中进行删除操作引发异常,数组下标越界异常等。
10 个让人头疼的 bug
|
运维 监控 IDE
同事牛逼啊,写了个隐藏 bug,我排查了 3 天才解决问题!
最近线上监控 SFTP 连接频繁爆表,通过重启某个系统,连接数迅速下降,系统就能恢复正常,初步判断是应用程序连接未关闭的问题导致的。
同事牛逼啊,写了个隐藏 bug,我排查了 3 天才解决问题!
|
前端开发 JavaScript 安全
开发过程中印象最深刻的Bug
开发过程中印象最深刻的Bug
689 1
|
安全 Oracle 关系型数据库
我修复印象比较深的bug
Oracle WebLogic T3反序列化漏洞
272 0
我修复印象比较深的bug
|
算法 程序员 测试技术
面对Bug程序员能做点什么
我们程序不可避免的会出现bug,那么我们能做哪些事情,尽可能减少bug的产生
423 0
面对Bug程序员能做点什么
|
移动开发 程序员
我修复的印象最深的一个bug
如果提到程序员,我们绝大多数人可能会说,程序员每天的时间除了开发需求就是在查bug。在我以前,肯定会不以为然,但自从我成为一名程序员之后,我才深有体验,这句话其实说得没错。