采用函数式接口实现字符串升序后倒序排列

一、题目要求

使用函数式接口,将一个随机字符串中的所有字符升序排列,并倒序打印。

二、题目答案

1.reverseSort.java

import java.util.Arrays;
import java.util.Comparator;

public class reverseSort {
    public static void main(String[] args) {
        String str = "aedbc";
        Comparator cmp = new reverseChar();

        Character[] charObjectArray =
                str.chars().mapToObj(c -> (char) c).toArray(Character[]::new);
        Arrays.sort(charObjectArray, cmp);
        System.out.println(Arrays.toString(charObjectArray));
    }
}

2.reverseChar

import java.util.Comparator;

public class reverseChar implements Comparator<Character> {
    public int compare(Character o1, Character o2) {
        if (o1 < o2) return 1;
        else if (o1 > o2) return -1;
        else return 0;
    }
}

三、题目解析

此题的难点在于如何将字符串转化为包装器类型的数组,并传入sort中。如果在sort中直接传入char[]数组,编译器会发生如下错误:
报错信息
当sort实现函数式接口功能时,接收的数组类型为泛型,因此传入基本类型char会发生错误,此时需要将char[]转化为Character[]。转化的方法有两种:
1.使用ArrayUtils包,此包不在jdk中,需要额外导入。

String str = "testString";
char[] charArray = str.toCharArray();
Character[] charObjectArray = ArrayUtils.toObject(charArray);

2.使用java8版本的API

String str = "testString";
//[t, e, s, t, S, t, r, i, n, g]
Character[] charObjectArray = 
    str.chars().mapToObj(c -> (char)c).toArray(Character[]::new); 

stackoverflow论坛对此的解释为:

· get an IntStream of the characters (you may want to also look at codePoints())
· map each ‘character’ value to Character (you need to cast to actually say that its really a char, and   then Java will box it automatically to Character)
· get the resulting array by calling toArray()

另外需要注意的是直接输出会直接打印地址信息:
[Ljava.lang.Character;@1ddc4ec2
正确的做法需要采用Arrays中的toString方法进行转换。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值