首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用java代码优化if Map语句映射

如何使用java代码优化if Map语句映射
EN

Stack Overflow用户
提问于 2022-11-27 10:30:16
回答 1查看 56关注 0票数 0

我是java新手,我想用java中的Map优化我的代码。当我编写我的代码时,我使用了很多if else语句,所以我希望在实现map时使用地图收集框架来减少代码,但结果并不准确。我的功能完全没用。这是我的密码。

代码语言:javascript
复制
private List<Item> getBussinessSearchItem(IteamSearch itemSearch, byte searchType,int size, int offSet){
        StringBuilder  queryBuilder - new StringBuilder();
        
        if(itemSearch.getOrigin()!=null && (checkOriginDomain(itemSearch.getOrigin))) {
            if(itemSearch.getSort().equalsIgnoreCase("name")) {
                if(itemSearch.getSortOrder() == 1) {
                    queryBuilder.append("ORDDER BY Name ASc");
                }else {
                    queryBuilder.append("ORDDER BY Name ASc");
                }
            }else if(itemSearch.getSort().equalsIgnoreCase("upc1")) {
                if(itemSearch.getSortOrder() == 1) {
                    queryBuilder.append("ORDDER BY upc1 ASc");
                }else {
                    queryBuilder.append("ORDDER BY upc1 ASc");
                }
            }
            else if(itemSearch.getSort().equalsIgnoreCase("minQuantiy")) {
                if(itemSearch.getSortOrder() == 1) {
                    queryBuilder.append("ORDDER BY minQuantiy ASc");
                }else {
                    queryBuilder.append("ORDDER BY minQuantiy ASc");
                }
            }
        }

当我使用上述语句时,它可以正常工作,并按照升序和DESCINDING顺序对结果进行适当排序。但是我不想实现上面的语句,我想实现map,而该映射的工作原理与上面的语句相同。这是我的代码,但下面的代码不起作用

代码语言:javascript
复制
private Map<String , String> getBussinessSearchItem(ItemSearch itemSearch){
        Map<Srring,String> newMap = new HashMap<>();
        itemSearch.getSort().equalsIgnoreCase("name");
        itemSearch.getSort().equalsIgnoreCase("upc1");
        itemSearch.getSort().equalsIgnoreCase("minQuantiy");
    }

我不知道如何实现map而不是if of语句。我想用地图或枚举来解决这个问题。

我的ItemSerach表包含名称、upc1、minquantity

EN

回答 1

Stack Overflow用户

发布于 2022-11-27 10:39:26

如果将排序选项移动到单独的类ItemSearchOrder类中,该类正确地实现了equalshashCode,则可以将其直接用作映射中的键:

代码语言:javascript
复制
class ItemSearchOrder {
  private final String sort;
  private final int order;
  public ItemSearchOrder(final String sort, final int order) {
    this.sort = Objects.requireNonNull(sort);
    this.order = order;
  }

  public static ItemSearchOrder asc(final String sort) {
    return new ItemSearchOrder(sort, 1);
  }

  public static ItemSearchOrder desc(final String sort) {
    return new ItemSearchOrder(sort, 0);
  }

  @Override
  public boolean equals(final Object other) {
    if (other == null) return false;
    if (other == this) return true;
    if (other.getClass() != this.getClass()) return false;

    return this.order == other.order
      && this.sort.equalsIgnoreCase(other.sort);
  }

  @Override
  public int hashCode() {
    return Objects.hash(sort, order);
  }
}

然后建立你的地图:

代码语言:javascript
复制
final Map<ItemSearchOrder, String> sortQueries = Map.ofEntries(
  Map.entry(ItemSearchOrder.asc("name")), "ORDER BY name ASC"),
  Map.entry(ItemSearchOrder.desc("name")), "ORDER BY name DESC"),
  Map.entry(ItemSearchOrder.asc("upc1")), "ORDER BY upc1 ASC"),
  ...
);

然后使用它查找正确的ORDER BY子句:

代码语言:javascript
复制
public List<Item> getBussinessSearchItem(
    final IteamSearch itemSearch, ...) {
  final String sort = sortQueries.get(itemSearch.getOrder());
  if (sort == null) {
    // unknown sort
  }

  // ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74589230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档