如何使用Java Streams获取格式为jpg的图片URL并以逗号分隔
现有包含多张不同类型图片的产品A,如何使用Java Streams筛选出包含jpg格式的图片,并将其对应的URL以逗号分隔输出?产品A的数据结构如下:
product A :{ name: a images: [ { img1: 1 url: url1 type: [ { format: jpg } { format: png } ] }, { img2: 1 url: url2 type: [ { format: mp4 } { format: png } ] }, { img3: 3 url: url3 type: [ { format: jpg } { format: mp4 } ] } ] }
解决方案
1. 定义对应实体类
先根据数据结构创建Java实体类,用于映射数据:
import java.util.List; // 产品类 public class Product { private String name; private List<Image> images; // 构造方法、getter、setter 自行补充 } // 图片类 public class Image { private String url; private List<ImageType> type; // 其他字段、构造方法、getter、setter 自行补充 } // 图片类型类 public class ImageType { private String format; // 构造方法、getter、setter 自行补充 }
2. 用Streams实现筛选与拼接
通过嵌套Stream完成筛选,再用收集器拼接结果:
import java.util.stream.Collectors; public class ImageUrlFilter { public static void main(String[] args) { // 假设已经初始化好Product实例productA String jpgUrls = productA.getImages().stream() // 过滤出包含jpg格式的图片(兼容大小写) .filter(image -> image.getType().stream() .anyMatch(type -> "jpg".equalsIgnoreCase(type.getFormat()))) // 提取图片URL .map(Image::getUrl) // 用逗号分隔拼接成字符串 .collect(Collectors.joining(",")); System.out.println(jpgUrls); // 输出结果:url1,url3 } }
关键逻辑说明
- 过滤条件:使用
filter结合嵌套的anyMatch,判断当前图片的类型列表中是否存在format为jpg的项,equalsIgnoreCase可兼容大小写差异 - 提取URL:通过
map操作将Image对象转换为对应的URL字符串 - 拼接结果:
Collectors.joining(",")直接将所有符合条件的URL用逗号连接成一个完整字符串
内容的提问来源于stack exchange,提问作者Tusker
相关产品推荐
相关产品推荐

