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"]
相关推荐
朦胧之21 小时前
AI 编程-老项目改造篇
java·前端·后端
程序猿大帅1 天前
别再只当调包侠了:用 Spring AI 落地 Function Calling,我被大模型硬生生砸出了三个大坑
java
程序员晓琪1 天前
约定大于配置:基于 Java 包名自动生成 API 版本路由的最佳实践
java·spring boot·后端
Flittly1 天前
【AgentScope Java新手村系列】(11)中断与恢复
java·spring boot·spring
众少成多积小致巨1 天前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
东坡白菜1 天前
破局全栈:前端开发的Java入门实战记录—JPA(2)
java·后端
SimonKing1 天前
艹,维护AI写的代码,我心态崩了......
java·后端·程序员
用户298698530141 天前
Java Word 文档样式进阶:段落与文本背景色设置完全指南
java·后端
小bo波2 天前
从"任意文件复制"深挖Java I/O:字符流与字节流的本质抉择
java·nio·io流·后端开发·文件复制
nanxun8863 天前
记一次诡异的 Docker 容器"串包"故障排查
java