バックエンド-「Javaストリームの一部のアプリケーション

1.キーに従ってリスト内のマップの値を取り出し、別のリストを作成します。
例:キーがマップ内のidの場合
List <Map
> RequirementsList = new ArrayList <>(); List <Long> newList = requiredmentsList .stream()。map(paramap-> StringUtil.safeToInteger(paramap.get( "id")、0).longValue())。collect(Collectors.toList());

2. 1つのリスト内のエンティティの属性を取り出して、別のリストを作成します。
例:Studnetエンティティにnaneの属性がある場合、
List <Student> RequirementsList = new ArrayList <>();
List <String> newList = RequirementsList.stream ()。map(student-> student :: name).collect(Collectors.toList());

3、リスト内のエンティティの特定のフィールドを取り出して
、コンマスプライスします。例:Studnetエンティティがnane
List <Student>の属性を持っている場合、requirementsList = new ArrayList <>();
String names = RequirementsList.stream ()。map (student-> student :: name).collect(Collectors.joining( "、"));

4.エンティティのフィールドに従ってリストをフィルタリングします。
例:Studnetエンティティに属性naneがある場合は、
List <Student>の名前に従って重複を削除します。requirementsList = new ArrayList <>(); RequirementsList = requiredmentsList.stream
() .filter(distinctByKey(student-> student :: name))。collect(Collectors.toList());
 
public static <T> Predicate <T> DistinctByKey(Function <?super T、?> keyExtractor){         Map <Object、 Boolean>         saw = new ConcurrentHashMap <>(); return t-> saw.putIfAbsent(keyExtractor.apply(t)、Boolean.TRUE)== null;     } 5、  括弧内には他にも多くの使用法があります/ *学生->学生:: nameとstudent-> student.getName()は意味です。に使える*/




 

 

実際のケース:

2つのリストを新しいリストに結合し、次のようにグループ化します。

list1:
[{クラス:クラス1、学生:張さん}、{クラス:クラス2、学生:
李弗}]リスト2:
[{クラス:クラス1、教師:シャオミン}、{クラス:クラス2、教師:スモールレッド}]
マージされたリスト:
[{クラス:クラス1、学生:張さん、教師:シャオミン}、{クラス:クラス2、学生:李シロキサン、教師:シャオホン}]

実装は次のとおりです。

import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class TestController {
    private static final Logger LOGGER = LoggerFactory.getLogger(TestController.class);

    /*先制造测试数据*/
    public static List<Map<String,String>>  classStudentList=new ArrayList();
    public static List<Map<String,String>>  classTeacherList=new ArrayList();

    public static Map<String,String> classStudent1=new HashMap();
    public static Map<String,String> classStudent2=new HashMap();

    public static Map<String,String> classTeacher1=new HashMap();
    public static Map<String,String> classTeacher2=new HashMap();
    static {
        classStudent1.put("班级","一班");
        classStudent1.put("学生","张三");
        classStudent2.put("班级","二班");
        classStudent2.put("学生","李四");
        classStudentList.add(classStudent1);
        classStudentList.add(classStudent2);

        classTeacher1.put("班级","一班");
        classTeacher1.put("教师","小明");
        classTeacher2.put("班级","二班");
        classTeacher2.put("教师","小红");
        classTeacher2.put("班级","三班");
        classTeacher2.put("教师","小蓝");
        classTeacherList.add(classTeacher1);
        classTeacherList.add(classTeacher2);
    }

    public static void main(String[] a){
        /*list合并*/
        List<Map<String,String>> allList= Stream.of(classStudentList, classTeacherList).flatMap(Collection::stream).collect(Collectors.toList());
        LOGGER.info("合并后的list:{}",JSON.toJSONString(allList));

        /*list转map*/
        Map<String, List<Map<String, String>>> classMap=allList.stream().collect(Collectors.groupingBy(e -> e.get("班级")));
        LOGGER.info("分组后的list:{}",JSON.toJSONString(classMap));

        /*map提取元素重组list*/
        List<Map<String,String>> classList2 = classMap.entrySet().stream().map(e->{
            Map<String, String> map = new HashMap<>();
            map.put("学生",e.getValue().stream().map(f->f.get("学生")!=null?f.get("学生"):"").collect(Collectors.joining()));
            map.put("教师",e.getValue().stream().map(f->f.get("教师")!=null?f.get("教师"):"").collect(Collectors.joining()));
            map.put("班级",e.getKey());
            return map;
        }).collect(Collectors.toList());
        LOGGER.info("拼接板结果list:{}",JSON.toJSONString(classList2));

        /*将以上三步合为1步*/
        List<Map<String,String>> classList=Stream.of(classStudentList, classTeacherList)
                .flatMap(Collection::stream)
                .collect(Collectors.toList())
                .stream().collect(Collectors.groupingBy(e -> e.get("班级")))
                .entrySet().stream().map(e->{
                    Map<String, String> map = new HashMap<>();
                    map.put("学生",e.getValue().stream().map(f->f.get("学生")!=null?f.get("学生"):"").collect(Collectors.joining()));
                    map.put("教师",e.getValue().stream().map(f->f.get("教师")!=null?f.get("教师"):"").collect(Collectors.joining()));
                    map.put("班级",e.getKey());
                    return map;
                })
                .collect(Collectors.toList());
        LOGGER.info("终极版结果list:{}",JSON.toJSONString(classList));
    }
}

 

印刷されたログは次のとおりです

 

おすすめ

転載: blog.csdn.net/nienianzhi1744/article/details/98206409