java8 对list按多个字段分类组成菜单树

1.新建一个实体类
public class MailTest {
    private String id;   //id
    private String recipient;   //邮件接收人
    private String subject; //邮件主题
    private String content; //邮件内容
      List<MailTest> listTest;
   public   MailTest(String id,String recipient,String subject,String content){
       this.id=id;
       this.recipient=recipient;
       this.subject=subject;
       this.content=content;

   }
新建一个测试类
package jesper.search.test;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Java8Stream {
    /**
     * 对mailList 进行分类
     * @param args
     */
    public static void main(String[] args){
        List<MailTest> mailList=new ArrayList<MailTest>();
        mailList.add(new MailTest("11","1","我","啊啊1"));
        mailList.add(new MailTest("22","2","我","啊啊2"));
        mailList.add(new MailTest("33","3","我","啊啊3"));
        mailList.add(new MailTest("44","1","我","啊啊4"));
        mailList.add(new MailTest("55","1","你","啊啊5"));
        mailList.add(new MailTest("66","3","我","啊啊6"));
        Map<String,List<MailTest>> mailList1=mailList.stream().collect(Collectors.groupingBy(MailTest::getRecipient));
        mailList.clear();
        mailList1.forEach((k,v)-> {
            MailTest mailTest1 = new MailTest();
            List<MailTest> mailList11=new ArrayList<MailTest>();
            mailTest1.setRecipient(k);
            mailTest1.setListTest(v);
            Map<String,List<MailTest>> mailList2=v.stream().collect(Collectors.groupingBy(MailTest::getSubject));
            mailList2.forEach((k1,v1)->{
                List<MailTest> mailList22=new ArrayList<MailTest>();
                MailTest mailTest2 = new MailTest();
                mailTest2.setContent(k1);
                mailTest2.setListTest(v1);
                mailList11.add(mailTest2);
            });
            mailTest1.setListTest(mailList11);
            mailList.add(mailTest1);
        });
        int a=0;
    }
}

2.结果

 

方式二、直接使用mybatis,获取list展示成菜单树 

 1.数据如下2.   .xml配置

 

<sql id="table"> t_area_press </sql>

<sql id="select_columns_sql">
    ap.id, ap.province, ap.city, ap.area, ap.subject, ap.grade,
    ap.press, ap.volum, ap.create_time, ap.update_time
</sql>

<resultMap type="com.kry.xr.entity.AreaPressVo" id="areaListMap">
   <!-- <id column="id" property="id"/>-->
    <result column="province" property="province"/>
    <collection property="areaPressVoList" ofType="com.kry.xr.entity.AreaPressVo">
        <result column="city" property="city"/>
        <collection property="areaPressVoList" ofType="com.kry.xr.entity.AreaPressVo">
            <result column="area" property="area"/>
            <result column="subject" property="subject"/>
            <result column="grade" property="grade"/>
        </collection>
    </collection>

</resultMap>


<select id="findAreaList" parameterType="java.util.Map" resultMap="areaListMap">
    SELECT
    <include refid="select_columns_sql" />
    FROM
    <include refid="table" /> ap

</select>

3.代码 

areaPressMapper.findAreaList(p, map)

4.获取数据

[{"id":null,"province":"湖北省","city":null,"area":null,"subject":null,"grade":null,"press":null,"volum":null,"createTime":null,"updateTime":null,"areaPressVoList":[{"id":null,"province":null,"city":"黄冈市","area":null,"subject":null,"grade":null,"press":null,"volum":null,"createTime":null,"updateTime":null,"areaPressVoList":[{"id":null,"province":null,"city":null,"area":"黄州区","subject":"语文","grade":"一年级","press":null,"volum":null,"createTime":null,"updateTime":null,"areaPressVoList":null},{"id":null,"province":null,"city":null,"area":"黄州区","subject":"语文","grade":"五年级","press":null,"volum":null,"createTime":null,"updateTime":null,"areaPressVoList":null},{"id":null,"province":null,"city":null,"area":"黄梅县","subject":"语文","grade":"五年级","press":null,"volum":null,"createTime":null,"updateTime":null,"areaPressVoList":null},{"id":null,"province":null,"city":null,"area":"黄梅县","subject":"语文","grade":"四年级","press":null,"volum":null,"createTime":null,"updateTime":null,"areaPressVoList":null}]}]}]

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值