精华内容
下载资源
问答
  • 获取Map中最大(小)的key

    千次阅读 2018-08-15 14:04:43
    Map中的key存放至set集合中,进行排序,排序后的set中第一个即为最小,最后一个即为最大 /** * 获取map中最大的key * @param map * @return */ public static Integer getMaxKey(Map<Integer, ...

    将Map中的key存放至set集合中,进行排序,排序后的set中第一个值即为最小,最后一个即为最大

    /**
    	 * 获取map中最大的key
    	 * @param map
    	 * @return
    	 */
    public static Integer getMaxKey(Map<Integer, List<User>> map) {
    		if (map == null){
    			return null;
    		}
    		Set<Integer> set = map.keySet();
    		Object[] obj = set.toArray();
    		Arrays.sort(obj);
    		return Integer.parseInt(obj[obj.length - 1].toString());
    	}

     

    展开全文
  • 但是现在我想首先获得key的值(第一个输入条目)或者最后一个。 应该有类似first()和last()之类方法吗? 我是否需要一个迭代器来获取第一个键入口?这就是为什么我用了LinkedHashMap! 谢谢! #1 热门回答(120 赞)...

    Java LinkedHashMap获取第一个或最后一个条目
    问题
    我使用了LinkedHashMap,因为重要的是键在 Map 中输入的顺序。

    但是现在我想首先获得key的值(第一个输入的条目)或者最后一个。

    应该有类似first()和last()之类的方法吗?

    我是否需要一个迭代器来获取第一个键入口?这就是为什么我用了LinkedHashMap!

    谢谢!

    #1 热门回答(120 赞)
    LinkedHashMap的语义仍然是Map的语义,而不是aLinkedList的语义。它保留了插入顺序,是的,但这是一个实现细节,而不是其界面的一个方面。

    获得"第一"条目的最快方式仍然是entrySet().iterator().next()。获取"最后"条目是可能的,但是需要通过调用.next()迭代整个条目集,直到达到最后一个.while (iterator.hasNext()) { lastElement = iterator.next() }

    编辑:但是,如果你愿意超越JavaSE API,Apache Commons Collections有自己的LinkedMap实现,它有像firstKey和lastKey这样的方法,可以满足你的需求。界面相当丰富。

    #2 热门回答(12 赞)
    你可以尝试做类似的事情(获得最后一个条目):

    linkedHashMap.entrySet().toArray()[linkedHashMap.size() -1];
    这是O(N)?

    #3 热门回答(8 赞)
    LinkedHashMap当前实现(Java 8)跟踪其尾部。如果考虑性能和/或 Map 大小,你可以通过反射访问该字段。

    由于实施可能会发生变化,因此也可能采用后备策略。如果抛出异常,你可能希望记录某些内容,因此你知道实现已更改。

    它可能看起来像:

    public static <K, V> Entry<K, V> getFirst(Map<K, V> map) {
    if (map.isEmpty()) return null;
    return map.entrySet().iterator().next();
    }

    public static <K, V> Entry<K, V> getLast(Map<K, V> map) {
    try {
    if (map instanceof LinkedHashMap) return getLastViaReflection(map);
    } catch (Exception ignore) { }
    return getLastByIterating(map);
    }

    private static <K, V> Entry<K, V> getLastByIterating(Map<K, V> map) {
    Entry<K, V> last = null;
    for (Entry<K, V> e : map.entrySet()) last = e;
    return last;
    }

    private static <K, V> Entry<K, V> getLastViaReflection(Map<K, V> map) throws NoSuchFieldException, IllegalAccessException {
    Field tail = map.getClass().getDeclaredField(“tail”);
    tail.setAccessible(true);
    return (Entry<K, V>) tail.get(map);
    }

    展开全文
  • 一个业务中, 涉及到了多层Map嵌套 , 总共是三层Map , 外层以Map作为参数,Map中包含了ID为数据标识 , PARAM为Map,里面存放是数据内容, 并且PARAM对应的Map中是以不确定字符串为key,Map为值的数据,而最后一...

    在一个业务中, 涉及到了多层Map的嵌套 , 总共是三层Map , 外层以Map作为参数,Map中包含了ID为数据标识 , PARAM为Map,里面存放的是数据内容, 并且PARAM对应的Map中是以不确定的字符串为key,Map为值的数据,而最后一层Map中存放了两个数据“SFSC”,“SFXH”都是String类型,数据结构如图所示: 

    注:括号中的类型都是value的类型而非key的类型

    像这中情况要如何获取参数呢? 

    insert  into table(ID,ZYZ_ID,LX,SFSC,SFXH) values
    <foreach collection="PARAM.entrySet()" item="value"  index="key"  separator="," >
       (UUID(),#{ID},#{key},#{value.SFSC},#{value.SFXH})
    </foreach>

    第一层通过PARAM.entrySet()方法获取到每个key放到value中,在通过#{value.SFXH};来取得最终的数据

    展开全文
  • ,需要循环List,然后通过List循环出来的Key获取Map中的值作为sql的入参,遇到了一些问题。但是经过不懈的努力,最后终于解决了这问题。顺便分享一下自己的经验。 项目结构 pom文件配置 server: port: ...

    前言

    最近在工作中需要使用到mybatis,需要实现某个功能。但是发现需要编写一个sql,但是mybatis的映射文件入参是List集合和Map<String,Integer>,需要循环List,然后通过List循环出来的值为Key获取Map中的值作为sql的入参,遇到了一些问题。但是经过不懈的努力,最后终于解决了这个问题。顺便分享一下自己的经验。

    1. 项目结构
      2.

    2. pom文件配置

    server:
      port: 8379
    
    spring:
      datasource:
        username: root
        url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
        driver-class-name: com.mysql.jdbc.Driver
    
    mybatis:
      mapper-locations: classpath:mapping/*Mapper.xml
      type-aliases-package: com.example.bean
    
    #showSql
    logging:
      level:
        com:
          example:
            dao : debug
    

    3 其他的业务代码

    package com.example.bean;
    
    import lombok.Data;
    
    @Data
    public class SysUser {
        private Integer id;
    
        private String username;
    
        private String image;
    }
    
    
    package com.example.controller;
    
    import com.example.bean.SysUser;
    import com.example.service.SysUserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    @RestController
    public class SysUserController {
    
        @Autowired
        private SysUserService sysUserService;
    
        @GetMapping("/getSysUserById/{id}")
        SysUser getSysUserById(@PathVariable("id") String id) {
            List<String> ids = new ArrayList<>();
            Map<String, Integer> infoMap = new HashMap<>();
            infoMap.put("1", 1);
            infoMap.put("8", 8);
            infoMap.put("9", 9);
            ids.add(id);
            return sysUserService.getSysUserById(ids, infoMap);
        }
    }
    
    
    package com.example.dao;
    
    import com.example.bean.SysUser;
    import org.apache.ibatis.annotations.Mapper;
    import org.apache.ibatis.annotations.Param;
    
    import java.util.List;
    import java.util.Map;
    
    @Mapper
    public interface SysUserMapper {
    
        SysUser getSysUserById(@Param("ids") List<String> ids,@Param("infoMap") Map<String,Integer> infoMap);
    }
    
    
    package com.example.service;
    
    import com.example.bean.SysUser;
    import com.example.dao.SysUserMapper;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    import java.util.Map;
    
    @Service
    public class SysUserService {
    
        @Autowired
        private SysUserMapper sysUserMapper;
    
        public SysUser getSysUserById(List<String> ids, Map<String, Integer> infoMap) {
            return sysUserMapper.getSysUserById(ids,infoMap);
        }
    }
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.example.dao.SysUserMapper">
        <select id="getSysUserById" resultType="com.example.bean.SysUser">
            <foreach collection="ids" item="id">
                <bind name="userId" value="infoMap[id]"/>
                select * from sys_user where id = #{userId}
            </foreach>
        </select>
    </mapper>
    

    在这里插入图片描述
    第一种采用#符的取值法,是可以防止sql注入的,可以通过循环List获取Map的值

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.example.dao.SysUserMapper">
        <select id="getSysUserById" resultType="com.example.bean.SysUser">
            <foreach collection="ids" item="id">
    <!--            <bind name="userId" value="infoMap[id]"/>-->
                select * from sys_user where id = '${infoMap[id]}'
            </foreach>
        </select>
    </mapper>
    

    在这里插入图片描述
    第二种方式采用$符的取值法,也可以获取,虽然不能防止sql注入,但是可以做白名单的校验,防止sql注入

    3 总结
    本人小白一枚,在工作中经常遇到问题,希望通过解决问题,将自己的经验分享给大家。有问题希望大家多多指出来。能够和大家互相交流

    展开全文
  • 今天在处理接口时,后台返回数据格式是这样 展开后是这样 我需要获取其中name,并...把bindingId.selectUser传给接口去查找对应数据,最后定义一个map空对象来等待存储数据 forEach() 方法用于调用数组
  • 今天实现一个需求:Map<...在检查了数据获取以及前端数据获取都没有错误情况下,出现了map里key值乱序问题(第一个put数据变成了map中最后一个数据。 解决方案:将HashMap 改成 LinkedHashMap(Linke
  • TreeMap删除第一个倒叙输出

    千次阅读 2018-01-18 02:50:19
    mark一下,有时间整理。之前没有注意,今天在mr中用这个取topN竟然效果更棒。 TreeMap map.lastEntry() //获取到treeMap中的第一个Entry或者... map.lastEntry().getValue() //获取最后一个key对应的的 map.remove
  • Map集合解析及运用

    2019-05-23 01:16:17
    标题Map简介Map常用方法1,增加方法2,删除方法3,判断4,获取5,获取-遍历方法方法运用1,将学生作为键,地址作为进行存储,名字年龄相同则被认定为一个人,最后按年龄进行排序2,统计字符串字符出现次数,按...
  • 思路:由以往写题,第可以想到用HashMap,key为字符,val为其出现次数,get方法能直接获取到val,最后判断次数是否为1即可,是则返回 分两步: 1、遍历字符串,统计字符出现次数 2、遍历原字符串并get其val,...
  • 1.spring管理bean原理 ...然后完成bean实例化,将bean节点id属性作为key,bean对象作为,存到map中最后我们就可以通过map获取bean实例了。 具体代码如下所示: package junit.test;import.
  • StreamflatMap 问题

    2020-04-10 21:49:19
    现在有一个List< Map,Obj>>list 集合 现在要求使用Stream流中的 flatMap 获取list集合里面所有MapKey值 最后用Set接受
  • mybatis传入多参数

    2018-01-19 14:44:00
    这里记住句话:无论你传参数是什么样最后mybtis都会将你传入转换为map的,那么既然这样,当我们要传入多参数时,何不直接给与map类型即可,然后mapper.xml通过#{map.key}来获取值即可,这特别适合动态...
  • mybatis多参数传递

    2017-09-06 11:27:00
    这里记住句话:无论你传参数是什么样最后mybtis都会将你传入转换为map的,那么既然这样,当我们要传入多参数时,何不直接给与map类型即可,然后mapper.xml通过#{map.key}来获取值即可,这特别适合动态...
  • HashMap遍历方式

    2019-09-22 10:10:16
    在HashMap,有一个明显特征。在存储时候,会有一个键值对关系。键和存在着一一对应(映射)关系。...第一种:普遍使用,foreach来获取map的keyset再通过key取value System.out.println(...
  • 前言 双向映射在某些场景下可以用上,在使用之前,首先需要了解双向映射具有哪些...因此,当你需要通过一个 数据或者键名 获取到另一方时候可以使用它,具体一点: A 需要一串 中文字符 来完成她负责功能并最后
  • 问题:例如在自己制作了成对输入(input256×256 target 200×256)后,如何让输入图像和输出图像分辨率不一致,... # Read输出将是一个文件名(key)和该文件内容(value,每次读取一个文件,分多次读取)。 ...
  • 在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的为true;如果该为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。...
  • 第一次写sparkstreaming 代码基本逻辑是 spark读取kafka主题分区数据成array数组 然后用自己写的一个类 解析每条消息 拼装成一个arraybuffer 然后通过sc.parallelize注册成rdd转dataframe注册成临时表 **现在...

空空如也

空空如也

1 2 3 4
收藏数 71
精华内容 28
关键字:

获取map中的最后一个key值