首页 > 代码库 > Java 技术笔记

Java 技术笔记

vlist提取字段生成新list

List<int> uidList = urResult.stream().map(p -> p.getUserId()).collect(Collectors.toList());

vList中根据某个字段条件生成新list

List<User> temp = uList.stream().filter(item -> item.getUid() == 10000).collect(Collectors.toList());

v去除List符合条件的元素

Optional<Ticket> oTicket = topicList.stream().filter(p -> p.getId().equals(to.getId())).findFirst();                        if (oTopic.isPresent()) {                            Ticket tempTicket = oTicket.get();                        }

vMybatis批量修改

<update id="updateBatch"  parameterType="java.util.List">      <foreach collection="list" item="item" index="index" open="" close="" separator=";">        update course        <set>            name=${item.name}        </set>        where id = ${item.id}    </foreach>      </update>

vMybatis实现InsertOrUpdate

<insert id="saveOrUpdate" >  <selectKey keyProperty="count" resultType="int" order="BEFORE">    select count(*) from country where id = #{id}  </selectKey>  <if test="count > 0">    update country     set countryname = #{countryname},countrycode = #{countrycode}     where id = #{id}  </if>  <if test="count==0">    insert into country values(#{id},#{countryname},#{countrycode})  </if></insert>

条件限制

根据不同的判断逻辑,会有所不同,就上面这个例子而言,就要求实体类中包含count属性(可以是别的名字)。否则selectKey的结果没法保存,如果入参是个Map类型,就没有这个限制。

说明

从例子来看除了有个限制外,也没别的麻烦。

通过selectKey做第一次查询,然后根据结果进行判断,所以这里的order="BEFORE"是必须的。

也是因为BEFORE,所以没法通过<bind>标签来临时存储中间的值,只能在入参中增加属性来存放。

v异步线程Thread

new Thread(){            public void run() {                // 方法体            }        }.start();

vJava计算代码执行时间

long startTime = System.currentTimeMillis();long endTime = System.currentTimeMillis();float seconds = (endTime - startTime) / 1000F;System.out.println("Cost seconds" + Float.toString(seconds));

Java 技术笔记