scala map,flatmap,filter的用法

大憨熊 提交于 2019-11-26 06:33:52

例子:

object test extends App {
  val fruits = Seq("apple", "banana", "orange")
  println(fruits.map(_.toUpperCase))
  println(fruits.flatMap(_.toUpperCase))
}

输出:

List(APPLE, BANANA, ORANGE)
List(A, P, P, L, E, B, A, N, A, N, A, O, R, A, N, G, E)

例子:

object test extends App {
  def toInt(s: String): Option[Int] = {
    try {
      Some(Integer.parseInt(s.trim))
    } catch {
      // catch Exception to catch null 's'
      case e: Exception => None
    }
  }
  val strings = Seq("1", "2", "foo", "3", "bar")
  println(strings.map(toInt))
  println(strings.flatMap(toInt))

}

输出:

List(Some(1), Some(2), None, Some(3), None)
List(1, 2, 3)

java 的例子:

AppUserDao appUserDao=new AppUserDaoImpl();
        dataMap=new HashMap<String, Object>();

        JSONObject jsonObject=new JSONObject();
        JSONObject resultJson=new JSONObject();
        List allresults=new ArrayList<>();
        List<JSONObject> lists = appUserDao.find("select jclx.id,jclx.sname,jcxm.sname as sname1,jcxm.id as id1 from jclx left join jcxm"
                + " on jcxm.jclx=jclx.id where qylx=(select top 1 qylx from qyb  where id=?) order by jclx.sname", id);

        for(int i=0;i<lists.size();i++){
            if(null!=lists.get(i).getString("sname1")){
                    List children=new ArrayList<String>();
                    String id=lists.get(i).getString("id");
                     List<JSONObject> small = lists.stream()
                            .filter(c -> c.getString("id").equals(id))
                            .collect(Collectors.toList());
                     for(int j=0;j<small.size();j++){
                        //当前子所有元素
                        JSONObject son=new JSONObject();
                        son.put("name", small.get(j).getString("sname1"));
                        son.put("id", small.get(j).getString("id1"));
                        children.add(son);
                        //son和parentId对应
                        jsonObject.put(small.get(j).getString("sname"), children);
                     }

            }
        }
        for(int i=0;i<lists.size();i++){
            if(null!=lists.get(i).getString("sname")){
                if(i==0){
                    JSONObject father=new JSONObject();
                    father.put("name", lists.get(i).getString("sname"));
                    father.put("id", lists.get(i).getString("id")); 
                    father.put("children", jsonObject.getString(lists.get(i).getString("sname")));
                    allresults.add(father);
                }else if(!lists.get(i).getString("sname").equals(lists.get(i-1).getString("sname"))){
                    JSONObject father=new JSONObject();
                    father.put("name", lists.get(i).getString("sname"));
                    father.put("id", lists.get(i).getString("id")); 
                    father.put("children", jsonObject.get(lists.get(i).getString("sname")));
                    allresults.add(father);
                }

            }
        }

        dataMap.put("all", allresults);
        return SUCCESS;

数据库格式:

0A8D6B5BB6E34E8FA03E2A4C002FE64D    机房能效        
6B4BF9CE6C1D4C37AC138B18A4335313    节能评估        
7914F428457A4F0EA097D401FE291C6B    基础信息    基础信息2   039061C76EA74B6ABFEACBDE371D5C23
7914F428457A4F0EA097D401FE291C6B    基础信息    基础信息1   C89E114CBC554EC5B4FBE85F31B16396
D7A38D6FB94349A383755E2BE298AF8B    空调能效    环境检查    5A26DEF2C8E74E90B81C3CCF6D57F228
D7A38D6FB94349A383755E2BE298AF8B    空调能效    空调检查    D4F006418D2C4C0D8D95CB6BD95CBD43

输出例子:

[
    {
        "name": "机房能效",
        "id": "0A8D6B5BB6E34E8FA03E2A4C002FE64D"
    },
    {
        "children": [
            {
                "name": "基础信息2",
                "id": "039061C76EA74B6ABFEACBDE371D5C23"
            },
            {
                "name": "基础信息1",
                "id": "C89E114CBC554EC5B4FBE85F31B16396"
            }
        ],
        "name": "基础信息",
        "id": "7914F428457A4F0EA097D401FE291C6B"
    },
    {
        "name": "节能评估",
        "id": "6B4BF9CE6C1D4C37AC138B18A4335313"
    },
    {
        "children": [
            {
                "name": "环境检查",
                "id": "5A26DEF2C8E74E90B81C3CCF6D57F228"
            },
            {
                "name": "空调检查",
                "id": "D4F006418D2C4C0D8D95CB6BD95CBD43"
            }
        ],
        "name": "空调能效",
        "id": "D7A38D6FB94349A383755E2BE298AF8B"
    }
]

主要利用:

                    String id=lists.get(i).getString("id");
                     List<JSONObject> small = lists.stream()
                            .filter(c -> c.getString("id").equals(id))
                            .collect(Collectors.toList());

找到当前的父节点一样的所有的子节点

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!