HashMap的使用,Service映射

简介: HashMap的使用,Service映射

一 前言

  说到map,其实很多人都是很头疼的,因为相比于List,Map的可读性更低,因此,在开发中我以前还是比较多的使用List,但是其实Map还是有非常多的好处的,现在就介绍一种Map非常实用的处理方式

## 二 场景

  你付款时,有两种付款方式,支付宝和微信支付。针对这两种支付方式会有不同的逻辑处理,这时候你可能会对两种支付方式建立不同的两个类,然后更具传入的类型判断使用哪种支付方式。

boolean isZFB =true;
boolean isWX =true;
if(isZFB){
    //调用支付宝实现
}
if(isWX){
    //调用微信实现
}

这样会有一个问题,随着支付方式的增多,if就会越来越多,最后很容易成为面条代码。这时候map可以解决这个问题。

## 三 应用
首先我们建立一个抽象的接口(这里面就使用正常的实战例子)

 public interface IEdiSender {}
 

建立接口的实现类

 public class Csm001ShipEdiService implements IEdiSender{
    public static final String EDI_TYPE = "CSM001";
    @Override
    public String getEdiType() {
        return EDI_TYPE;
    }
}

public class Csm002ShipEdiService implements IEdiSender{
    public static final String EDI_TYPE = "CSM002";
    @Override
    public String getEdiType() {
        return EDI_TYPE;
    }
}

然后在Spring初始化的时候将类型码与实现的实例进行一个映射

@Service
public class EdiSenderProvider implements ApplicationContextAware {

    private Map<String, IEdiSender> iEdiSenderMap;

    public IEdiSender getEdiSenderByType(String ediType) {
        return iEdiSenderMap.get(ediType);
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        Map<String, IEdiSender> beansOfType = applicationContext.getBeansOfType(IEdiSender.class);
        iEdiSenderMap = new HashMap<String, IEdiSender>();
        for (IEdiSender iEdiSender : beansOfType.values()) {
            iEdiSenderMap.put(iEdiSender.getEdiType(), iEdiSender);
        }

    }



}

然后调用时直接通过类型获取实例就可以了,非常使用,其实这个和Beanfactory的Map是一样的效用。

相关文章
|
7月前
|
存储 算法 安全
深入了解哈希映射(HashMap)
哈希映射是现代软件开发中不可或缺的一种数据结构,它通过独特的存储和检索机制,提供了高效的数据处理能力。正确理解和使用哈希映射,能够显著提高软件性能和开发效率。不论是在日常的软件开发还是在处理大规模数据集时,哈希映射都是一个极佳的选择。
138 1
|
8月前
|
存储 缓存 Rust
Rust 笔记:Rust 语言中哈希结构(哈希映射,HashMap)、集合(哈希集,HashSet)及其使用
Rust 笔记:Rust 语言中哈希结构(哈希映射,HashMap)、集合(哈希集,HashSet)及其使用
1067 0
|
存储 缓存 Rust
Rust 笔记:Rust 语言中映射(HashMap)与集合(HashSet)及其用法
本文介绍 Rust 中哈希结构相关概念及其使用。在 Rust 中,提供了两种哈希表,一个是 HashMap,另外一个是 HashSet,本文都将逐一介绍,并介绍 哈希函数 的用法。
332 0
|
存储 算法 Java
《恋上数据结构第1季》映射 TreeMap,HashMap,LinkedHashMap
《恋上数据结构第1季》映射 TreeMap,HashMap,LinkedHashMap
《恋上数据结构第1季》映射 TreeMap,HashMap,LinkedHashMap
|
存储 Python Java
LeetCode 706:设计哈希映射 Design HashMap
题目: 不使用任何内建的哈希表库设计一个哈希映射 具体地说,你的设计应该包含以下的功能 put(key, value):向哈希映射中插入(键,值)的数值对。如果键对应的值已经存在,更新这个值。 get(key):返回给定的键所对应的值,如果映射中不包含这个键,返回-1。
1073 0
|
Java 容器 C++
HashMap 映射
问:java中Map与HashMap 的关系是什么? 答:Map是一个接口,HashMap是Map的实现类之一。 Entry 与 Map  java.util.Map.Entry&lt;K, V&gt;  interface Entry&lt;K,V&gt;  类似于cpp中的pair。  template&lt;class _T1, class _T2&gt;     st
1184 0
|
3月前
|
Java
让星星⭐月亮告诉你,HashMap中保证红黑树根节点一定是对应链表头节点moveRootToFront()方法源码解读
当红黑树的根节点不是其对应链表的头节点时,通过调整指针的方式将其移动至链表头部。具体步骤包括:从链表中移除根节点,更新根节点及其前后节点的指针,确保根节点成为新的头节点,并保持链表结构的完整性。此过程在Java的`HashMap$TreeNode.moveRootToFront()`方法中实现,确保了高效的数据访问与管理。
32 2
|
3月前
|
Java 索引
让星星⭐月亮告诉你,HashMap之往红黑树添加元素-putTreeVal方法源码解读
本文详细解析了Java `HashMap` 中 `putTreeVal` 方法的源码,该方法用于在红黑树中添加元素。当数组索引位置已存在红黑树类型的元素时,会调用此方法。具体步骤包括:从根节点开始遍历红黑树,找到合适位置插入新元素,调整节点指针,保持红黑树平衡,并确保根节点是链表头节点。通过源码解析,帮助读者深入理解 `HashMap` 的内部实现机制。
48 2
|
3月前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
69 0
|
12天前
|
存储 缓存 Java
HashMap源码剖析-put流程
更好地掌握 `HashMap` 的内部实现原理,提高编写高效代码的能力。掌握这些原理不仅有助于优化性能,还可以帮助解决实际开发中的问题。
43 13