当前位置:首页 > 技术 > 正文内容

Java代码优化与现代编程实践指南

访客 技术 2026年6月17日 1

Stream API集合处理技巧

HashMap<String, Integer> dataMap = new HashMap<>();
dataMap.put("X", 10);
dataMap.put("Y", 20);
List<Integer> numberList = Arrays.asList(3, 6, 9, 12, 15, 15);

// 求数值总和
int total = numberList.stream().mapToInt(Integer::intValue).sum();
int accumulate = numberList.stream().reduce(0, Integer::sum);
int parallelSum = numberList.parallelStream().reduce(0, Integer::sum);

// 查找极值
Optional<Integer> maximum = numberList.stream().max(Integer::compareTo);
Optional<Integer> minimum = numberList.stream().min(Integer::compareTo);
minimum.ifPresent(val -> System.out.println("最小值: " + val));

// 统计信息汇总
IntSummaryStatistics stats = numberList.stream()
        .mapToInt(Integer::intValue)
        .summaryStatistics();
System.out.println("最大数: " + stats.getMax());
System.out.println("最小数: " + stats.getMin());
System.out.println("合计: " + stats.getSum());
System.out.println("均值: " + stats.getAverage());

// 数据去重
List<Integer> uniqueNumbers = numberList.stream()
        .distinct()
        .toList();

// 遍历输出
numberList.forEach(System.out::println);
dataMap.forEach((k, v) -> System.out.println(k + "=>" + v));

// 条件过滤与变换
List<String> wordList = Arrays.asList("hello", "world", "java");
List<String> processedWords = wordList.stream()
        .filter(word -> word.length() > 4)
        .map(String::toUpperCase)
        .toList();

// 对象分组与聚合
List<Employee> employees = Arrays.asList(
        new Employee("张三", 25),
        new Employee("李四", 30),
        new Employee("王五", 25)
);

Map<Integer, List<Employee>> groupedByAge = employees.stream()
        .collect(Collectors.groupingBy(Employee::getAge));

int ageSum = employees.stream()
        .mapToInt(Employee::getAge)
        .sum();

// 嵌套对象处理
Optional<Organization> org = fetchOrganization();
String managerName = org.flatMap(Organization::getTeam)
        .flatMap(Team::getLeader)
        .map(Leader::getFullName)
        .orElse("未指定");

int[] arrayData = {2, 4, 6, 8, 10};
int arraySum = Arrays.stream(arrayData).sum();
int[] sortedArray = Arrays.stream(arrayData).sorted().toArray();

异常处理最佳实践

// 自动资源管理
try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
     BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
    // 文件处理逻辑
} catch (IOException ex) {
    // 异常处理
}

函数式接口简化回调机制

// 传统方式定义回调接口
public interface ResponseHandler {
    void handleSuccess(String data);
    void handleError(Exception error);
}

public void asyncRequest(ResponseHandler handler) {
    try {
        String result = performRequest();
        handler.handleSuccess(result);
    } catch (Exception ex) {
        handler.handleError(ex);
    }
}

// 传统调用方式
asyncRequest(new ResponseHandler() {
    @Override
    public void handleSuccess(String data) {
        System.out.println("成功: " + data);
    }
    
    @Override
    public void handleError(Exception error) {
        System.err.println("失败: " + error.getMessage());
    }
});

// 函数式接口优化后
@FunctionalInterface
public interface ResponseCallback {
    void onSuccess(String result);
    void onFailure(Exception error);
}

public void executeAsync(ResponseCallback callback) {
    try {
        String data = requestData();
        callback.onSuccess(data);
    } catch (Exception ex) {
        callback.onFailure(ex);
    }
}

// Lambda表达式调用
executeAsync(
    result -> System.out.println("响应: " + result),
    error -> System.err.println("错误: " + error.getMessage())
);

字符串处理优化策略

// 格式化字符串
String userName = "王小明";
int userAge = 22;
String userInfo = String.format("姓名:%s,年龄:%d岁", userName, userAge);

// 字符串拼接优化
// StringBuilder适用于单线程环境
StringBuilder builder = new StringBuilder();
builder.append("项目A").append("-").append("阶段1");
String projectInfo = builder.toString();

// StringBuffer适用于多线程环境
StringBuffer buffer = new StringBuffer();
buffer.append("模块B").append(":").append("完成");
String moduleStatus = buffer.toString();

// StringJoiner用于分隔符拼接
StringJoiner joiner = new StringJoiner("|");
joiner.add("数据1").add("数据2").add("数据3");
String joinedResult = joiner.toString();

// Java 11新增字符串方法
String multilineText = "第一行\n第二行";
System.out.println(multilineText.isBlank());
System.out.println(multilineText.lines().count());

// Java 14文本块特性
String xmlContent = """
                    <?xml version="1.0"?>
                    <root>
                        <element>内容</element>
                    </root>
                    """;
System.out.println(xmlContent);

并发编程优化方案

// 传统线程安全集合使用
Hashtable<String, Integer> legacyTable = new Hashtable<>();
synchronized (legacyTable) {
    if (!legacyTable.containsKey("counter")) {
        legacyTable.put("counter", 1);
    } else {
        legacyTable.put("counter", legacyTable.get("counter") + 1);
    }
}

// 现代并发集合优化
ConcurrentMap<String, Integer> modernMap = new ConcurrentHashMap<>();
modernMap.putIfAbsent("counter", 0);
modernMap.computeIfPresent("counter", (key, value) -> value + 1);

// CompletableFuture异步编程
CompletableFuture<String> taskOne = CompletableFuture.supplyAsync(() -> processTaskA());
CompletableFuture<String> taskTwo = CompletableFuture.supplyAsync(() -> processTaskB());
CompletableFuture<String> mergedTasks = taskOne.thenCombine(taskTwo, (a, b) -> a + " | " + b);

// 超时控制
CompletableFuture<String> timeoutTask = CompletableFuture.supplyAsync(() -> longRunningTask());
try {
    String outcome = timeoutTask.get(2, TimeUnit.SECONDS);
} catch (TimeoutException tex) {
    // 超时处理逻辑
}

其他优化技术

惰性求值模式

// 延迟计算实现
Supplier<String> deferredCalculation = () -> {
    // 复杂计算过程
    return expensiveComputation();
};

String computedValue = deferredCalculation.get(); // 实际执行计算

对象映射转换

class User {
    private String fullName;
    private int userAge;
    private double accountBalance;
}

class UserView {
    private String name;
    private int age;
}

// Function接口转换
Function<User, UserView> converter = user -> {
    UserView view = new UserView();
    view.name = user.getFullName();
    view.age = user.getUserAge();
    return view;
};
UserView userViewModel = converter.apply(userObject);

// BeanUtils工具转换
UserView targetView = new UserView();
BeanUtils.copyProperties(userObject, targetView);
标签: java8

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。