如何为列表的匹配元素创建Java谓词?

发布于 2025-02-13 11:06:25 字数 1398 浏览 1 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

扛刀软妹 2025-02-20 11:06:25

编辑

package com.demo;

// -- 
// imports for output
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
// --
import lombok.Getter;
import lombok.RequiredArgsConstructor;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Demo {

    @Getter
    @RequiredArgsConstructor
    public static class Keys {
        private final String key1;
        private final String key2;
    }

    public static void main(String[] args) throws JsonProcessingException {
        //List1
        List<String> list1 = Arrays.asList("A", "B", "C");
        //List2
        List<Keys> list2 = Arrays.asList(
                new Keys("obj1", "A"),
                new Keys("obj2", "B"),
                new Keys("obj3", "D"),
                new Keys("obj4", "F")
        );
        
        List<Keys> filteredList = 
                //create sequential stream over the elements of list2
                list2.stream()
                        //filter using lambda
                        .filter(
                                //x - element of type Keys 
                                x 
                                ->
                                //predicate returns true - if list1 contains key2 value of stream element 
                                list1.contains(x.key2)
                        )
                        //collect stream to list
                        .collect(
                                //default list collector
                                Collectors.toList()
                        );
        
        //output with pretty printer
        ObjectWriter objectWriter = new ObjectMapper().writerWithDefaultPrettyPrinter();
        System.out.println(objectWriter.writeValueAsString(filteredList));
    }
}

输出示例:

[ {
"key1" : "obj1",
"key2" : "A"
}, {
"key1" : "obj2",
"key2" : "B"
} ]

EDITED:

package com.demo;

// -- 
// imports for output
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
// --
import lombok.Getter;
import lombok.RequiredArgsConstructor;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Demo {

    @Getter
    @RequiredArgsConstructor
    public static class Keys {
        private final String key1;
        private final String key2;
    }

    public static void main(String[] args) throws JsonProcessingException {
        //List1
        List<String> list1 = Arrays.asList("A", "B", "C");
        //List2
        List<Keys> list2 = Arrays.asList(
                new Keys("obj1", "A"),
                new Keys("obj2", "B"),
                new Keys("obj3", "D"),
                new Keys("obj4", "F")
        );
        
        List<Keys> filteredList = 
                //create sequential stream over the elements of list2
                list2.stream()
                        //filter using lambda
                        .filter(
                                //x - element of type Keys 
                                x 
                                ->
                                //predicate returns true - if list1 contains key2 value of stream element 
                                list1.contains(x.key2)
                        )
                        //collect stream to list
                        .collect(
                                //default list collector
                                Collectors.toList()
                        );
        
        //output with pretty printer
        ObjectWriter objectWriter = new ObjectMapper().writerWithDefaultPrettyPrinter();
        System.out.println(objectWriter.writeValueAsString(filteredList));
    }
}

output example:

[ {
"key1" : "obj1",
"key2" : "A"
}, {
"key1" : "obj2",
"key2" : "B"
} ]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文