java8 stream 常用转换方法

Set → List

java 复制代码
Set<String> set = new HashSet<>(Arrays.asList("a", "b", "c"));

// 转为 ArrayList
List<String> list = new ArrayList<>(set);

// 转为 LinkedList(如果需要)
List<String> linkedList = new LinkedList<>(set);

Set → Array

java 复制代码
Set<String> set = new HashSet<>(Arrays.asList("a", "b", "c"));

// 方法1:传入空数组(推荐,简洁)
String[] array = set.toArray(new String[0]);

// 方法2:传入指定大小的数组(兼容旧代码)
String[] array2 = set.toArray(new String[set.size()]);

上面2个有也有stream

java 复制代码
// Set → List
List<String> list = set.stream().collect(Collectors.toList());

// Set → Array
String[] array = set.stream().toArray(String[]::new);

List => map

java 复制代码
@Data
@Table(name = "sys_dict_data")
@EqualsAndHashCode(callSuper = true)
@AllArgsConstructor
@NoArgsConstructor
public class DictData extends BaseEntity {
    long dictCode;
    String dictLabel;
    String dictValue;
    String dictType;
    long dictSort;
    String listClass;
    String isDefault;
    String remark;
}
java 复制代码
 // 转换为 Map
      Map<String, DictData> dictMap = dictList.stream()
    .collect(Collectors.toMap(
        DictData::getDictValue, // 作为key
        Function.identity(),
        (v1, v2) -> v1,
        LinkedHashMap::new  // 保持插入顺序
    ));

Stream 基本语法

java 复制代码
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();

List stream 转换 + 过滤 List => List

java 复制代码
private DictDataVO convertToVO(DictData dictData) {
        DictDataVO vo = new DictDataVO();
        BeanUtils.copyProperties(dictData, vo);

        if (dictData.getStatus() != null && !dictData.getStatus().trim().isEmpty()) {
            String statusName = dictCacheService.getDictLabel("sys_normal_disable", dictData.getStatus().trim());
            vo.setStatusName(statusName);
        } else {
            vo.setStatusName("");
        }

        return vo;
    }
java 复制代码
  // 转换为 VO 并填充字典名称 实体类转为前端接受的类
        List<UserVO> voList = userList.stream()
                .filter(Objects::nonNull)
                .map(this::convertToVO)
                .collect(Collectors.toList());

arrays stream 转换 + 过滤

参数是数组, 去除前后空格,删除空的值, 转为long类型, 最后转成List

java 复制代码
  List<Long> idList = Arrays.stream(ids.split(","))
                .map(String::trim)
                .filter(s -> !s.isEmpty())
                .map(Long::parseLong)
                .collect(Collectors.toList());

求和

java 复制代码
List<Integer> nums = Arrays.asList(10, 20, 30);
int sum = nums.stream().mapToInt(Integer::intValue).sum();
// 或直接:
int sum2 = nums.stream().reduce(0, Integer::sum);

去重 + 排序

java 复制代码
List<String> words = Arrays.asList("banana", "apple", "banana", "cherry");
List<String> uniqueSorted = words.stream()
                                 .distinct()
                                 .sorted()
                                 .collect(Collectors.toList());
// 结果: ["apple", "banana", "cherry"]
相关推荐
星轨zb1 小时前
从通用到专属:文迹(WenJi)引入 RAG 向量库的技术复盘
java·spring·langchain4j
我是一颗柠檬1 小时前
【Java后端技术亮点】Feed流三级缓存设计,从10秒到100毫秒的优化实战
java·开发语言·后端·缓存
超梦dasgg1 小时前
Java 正则表达式 完整详解(语法 + 核心类 + 常用方法 + 实战案例)
java·开发语言·正则表达式
码语智行1 小时前
操作日志注解模块
java·前端·python
方也_arkling1 小时前
【Java-Day17】API篇-BigInteger和BigDecimal
java·开发语言
程序员三明治1 小时前
【AI】RAG 数据分块(Chunk)策略与实践
java·人工智能·后端·ai·大模型·llm·rag
星辰_mya1 小时前
ThreadLocal之微服务链路追踪
java·开发语言·前端
松仔log1 小时前
Jetpack——DataStore
java·kotlin
咸鱼翻身小阿橙1 小时前
文件读写 + Qt Model/View + 自定义分页+搜索过滤
java·数据库·qt