Guava--Joiner使用方式以及java8实现Joiner

本文介绍了Guava库中的Joiner工具类,演示了如何将数组或集合转换为字符串,包括处理空值、使用默认值替换空值以及将结果写入不同类型的输出设备等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Guava简介

Guava是一种基于开源的Java库,其中包含谷歌正在由他们很多项目使用的很多核心库。这个库是为了方便编码,并减少编码错误。这个库提供用于集合,缓存,支持原语,并发性,常见注解,字符串处理,I/O和验证的实用方法。【易百教程】

2. Guava之Joiner<把数组/集合, 转换为字符串>

public class JoinerTest {

    private List<String> arr = Arrays.asList("Google", "Java", "RabbitMq");
    private List<String> arrHaveNullValue = Arrays.asList("Google", "Java", "RabbitMq", null);


    /**
     * 1. 可以使用join连接(数组)和(集合), 设置分隔符.
     * 2. 返回拼接之后的一个字符串.<result>
     */
    @Test
    public void testJoin() {
        String result = Joiner.on("#").join(arr);
        assertThat(result, equalTo("Google#Java#RabbitMq"));
    }

    /**
     * 1. 可以使用join连接(数组)和(集合), 设置分隔符.
     * 2. 若(数组)和(集合)中含有null, 会抛出NullPointerException.
     * 3. 返回拼接之后的一个字符串.<result>
     */
    @Test(expected = NullPointerException.class)
    public void testJoinHaveNullValue() {
        String result = Joiner.on("#").join(arrHaveNullValue);
        assertThat(result, equalTo("Google#Java#RabbitMq"));
    }

    /**
     * 1. 可以使用join连接(数组)和(集合), 设置分隔符.
     * 2. 若(数组)和(集合)中含有null, 会抛出NullPointerException.
     * 3. 可以使用skipNulls(), 去除null.
     * 4. 返回拼接之后的一个字符串.<result>
     */
    @Test
    public void test_Joiner_Skip_NullValue() {
        String result = Joiner.on("#").skipNulls().join(arrHaveNullValue);
        assertThat(result, equalTo("Google#Java#RabbitMq"));
    }

    /**
     * 1. 可以使用join连接(数组)和(集合), 设置分隔符.
     * 2. 若(数组)和(集合)中含有null, 会抛出NullPointerException.
     * 3. 可以使用useForNull(), 去替换null.
     * 4. 返回拼接之后的一个字符串.<result>
     */
    @Test
    public void test_Joiner_UseDefaultValue_NullValue() {
        String result = Joiner.on("#").useForNull("DEFAULT").join(arrHaveNullValue);
        assertThat(result, equalTo("Google#Java#RabbitMq#DEFAULT"));
    }

    /**
     * 1. 可以使用join连接(数组)和(集合), 设置分隔符.
     * 2. 若(数组)和(集合)中含有null, 会抛出NullPointerException.
     * 3. 可以使用skipNulls(), 去除null.
     * 4. 把(数组)和(集合)结果放入到StringBuilder or StringBuffer中.<result>
     */
    @Test
    public void test_Joiner_Append_StringBuilder() {
        StringBuilder builder = new StringBuilder();
        StringBuilder resultBuilder = Joiner.on("#").skipNulls().appendTo(builder, arrHaveNullValue);
        assertThat(resultBuilder, sameInstance(builder));
        assertThat(resultBuilder.toString(), equalTo("Google#Java#RabbitMq"));
        assertThat(builder.toString(), equalTo("Google#Java#RabbitMq"));
    }

    /**
     * 1. 可以使用join连接(数组)和(集合), 设置分隔符.
     * 2. 若(数组)和(集合)中含有null, 会抛出NullPointerException.
     * 3. 可以使用skipNulls(), 去除null.
     * 4. 把(数组)和(集合)结果放入到FileWriter中.<result>
     */
    @Test
    public void test_Joiner_Append_Writer() {
        String targetFileName = "D:\\usr\\guava-join-append.txt";

        try (FileWriter writer = new FileWriter(new File(targetFileName))) {
            Joiner.on("#").skipNulls().appendTo(writer, arr);
        } catch (IOException e) {
            fail("Joiner append to file is error!");
        }
    }

    /**
     * 1. 使用java8Stream达到和Join一样的功能.
     */
    @Test
    public void test_Java8_skip_NullValue() {
        String result = arrHaveNullValue.stream()
                .filter(item -> item != null && !item.isEmpty())
                .collect(joining("#"));
        assertThat(result, equalTo("Google#Java#RabbitMq"));
    }

    @Test
    public void test_Java8_UseDefaultValue_NullValue() {
        String result = arrHaveNullValue.stream()
                .map(item -> item == null || item.isEmpty() ? "DEFAULT" : item)
                .collect(joining("#"));
        assertThat(result, equalTo("Google#Java#RabbitMq#DEFAULT"));
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值