java8 把list<test>中有个字段status 自定义排序以123546排序
时间: 2024-02-05 20:10:48 浏览: 340
可以使用Java 8的Comparator来实现自定义排序。下面是一种可能的实现方式:
```java
List<Test> list = // 获取原始数据列表
list.sort(Comparator.comparingInt(test -> {
int status = test.getStatus();
switch (status) {
case 1:
return 1;
case 2:
return 2;
case 3:
return 3;
case 5:
return 4;
case 4:
return 5;
case 6:
return 6;
default:
return 7;
}
}));
```
上述代码中,我们首先使用Lambda表达式来获取每个Test对象的status字段,然后根据status的值返回一个排序权重,最后使用Comparator来进行排序。其中,1、2、3、5、4、6分别对应了123546排序的顺序,其他值都排在最后。
相关问题
优化语句<update id="updateByPrimaryKey" parameterType="com.example.demo.domain.Permission"> update sys_permission <set> <if test="permission_id!=null"> permission_id = #{permission_id}, </if> <if test="pid!=null"> pid = #{pid}, </if> <if test="name!=null"> name = #{name}, </if> <if test="type!=null"> type = #{type}, </if> <if test="permission_value!=null"> permission_value = #{permission_value}, </if> <if test="uri!=null"> uri = #{uri}, </if> <if test="icon!=null"> icon = #{icon}, </if> <if test="status!=null"> status = #{status}, </if> <if test="ctime!=null"> ctime = #{ctime}, </if> <if test="orders!=null"> orders = #{orders}, </if> <if test="system_id!=null"> system_id = #{system_id} </if> </set> where permission_id = #{permission_id} </update>
这段MyBatis XML中的SQL语句看起来已经比较优化了,但还有一些可以改进的地方。下面是一些建议:
1. 使用`<trim>`标签:在`<set>`标签中,每个`<if>`标签都会生成一个逗号,最后一个`<if>`标签需要特殊处理。可以使用`<trim>`标签来解决这个问题,示例代码如下:
```xml
<set>
<trim suffixOverrides="," suffix=" ">
<if test="permission_id!=null">
permission_id = #{permission_id},
</if>
<if test="pid!=null">
pid = #{pid},
</if>
<!-- 其他属性 -->
<if test="system_id!=null">
system_id = #{system_id}
</if>
</trim>
</set>
```
上面的代码中,使用了`suffixOverrides`属性来删除每个`<if>`标签生成的逗号。同时,使用了`suffix`属性来在最后一个属性后面添加一个空格。
2. 使用`<foreach>`标签:如果要更新的字段比较多,可以使用`<foreach>`标签来生成`<if>`标签,减少重复代码。示例代码如下:
```xml
<set>
<foreach collection="updateFields" item="field">
<if test="field=='permission_id'">
permission_id = #{permission_id},
</if>
<if test="field=='pid'">
pid = #{pid},
</if>
<!-- 其他属性 -->
<if test="field=='system_id'">
system_id = #{system_id}
</if>
</foreach>
</set>
```
上面的代码中,`updateFields`是一个`List<String>`类型的变量,存储需要更新的字段名。使用`<foreach>`标签遍历`updateFields`,生成对应的`<if>`标签。
3. 使用动态SQL:如果更新的条件和更新的字段都不确定,可以使用动态SQL来生成SQL语句。示例代码如下:
```xml
<update id="updatePermission" parameterType="Map">
UPDATE sys_permission
<set>
<foreach collection="updateFields" item="field">
${field} = #{${field}},
</foreach>
</set>
<where>
1=1
<foreach collection="conditions" item="condition" separator="AND">
${condition.field} ${condition.operator} #{condition.value}
</foreach>
</where>
</update>
```
上面的代码中,`updateFields`和`conditions`都是存储在`Map`中的变量,分别表示需要更新的字段和更新的条件。使用`${}`语法来插入动态SQL。
@Select("<script>select * from access_log where timestamp between #{start} and #{end} <if test="status != null and status !=''" > and status = #{status}</if><if test="ip != null and ip !=''" > and ip = #{ip}</if><if test="url != null and url !=''" > and url = #{url}</if><if test="appId != null and appId !=''" > and app_id = #{appId}</if></script>") List<AccessLog> search(@Param("url") String url, @Param("appId") String appId, @Param("start") Long start, @Param("end") Long end, @Param("status") Integer status,@Param("ip") String ip) ;这种写法底层调用jdbc连接会长时间占用吗
这种写法的底层调用 JDBC 连接不会长时间占用。当执行 `search` 方法时,MyBatis 会先根据传入的参数动态生成 SQL 语句,然后执行 SQL 语句查询数据库,并将查询结果映射成对应的对象返回。整个过程中,MyBatis 会自动管理 JDBC 连接的获取和释放,确保连接池中的连接得到充分利用,同时避免长时间占用连接导致连接池溢出的问题。
需要注意的是,在使用 MyBatis 进行大量查询操作时,应该尽量避免使用 `SELECT *` 的方式查询整张表的数据。这样会导致查询结果返回的数据量过大,占用大量的内存和网络带宽资源,影响系统的性能和稳定性。建议根据实际需求,只查询需要的字段,或者使用分页查询等方式来控制查询结果的数量。
阅读全文