Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:如何以优雅的方式将字符串数组从索引0压缩到-2?_Java_Lambda - Fatal编程技术网

Java:如何以优雅的方式将字符串数组从索引0压缩到-2?

Java:如何以优雅的方式将字符串数组从索引0压缩到-2?,java,lambda,Java,Lambda,我正在将一些订单页面文件(html)提取到Javaorder类中,下面是这段代码: List<Order> orders = Files.walk(Paths.get(path, "orders", "html")) .map(Path::toFile) .map(this::readFileToString) .map(content -> { Order order = new Order();

我正在将一些订单页面文件(html)提取到Java
order
类中,下面是这段代码:

List<Order> orders = Files.walk(Paths.get(path, "orders", "html"))
        .map(Path::toFile)
        .map(this::readFileToString)
        .map(content -> {
            Order order = new Order();
            evaluateXPath("//*[@id='page']/div[2]/div[1]/div[3]/div[2]/span[2]/text()", content)
                    .ifPresent(x -> {
                        String[] results = x.split(" ");
                        if (results.length >= 3) {
                            StringBuilder stringBuilder = new StringBuilder();
                            for (int i = 0; i < results.length - 2; i++) {
                                stringBuilder.append(results[i]);
                            }
                            order.setConsignee(stringBuilder.toString());
                            order.setPhoneNumber(results[results.length - 2]);
                            order.setAddress(results[results.length - 1]);
                        }
                    });
            return order;
        }).collect(Collectors.toList());


//a exception free wrapper method for FileUtils.readFileToString
private String readFileToString(File file) {
    try {
        return FileUtils.readFileToString(file);
    } catch (IOException e) {
        LOGGER.error("read " + file + " failed.");
        return "";
    }
}

private Optional<String> evaluateXPath(String xpath, String content) {
    //a mysterious implementation of evaluateXPath
}
List orders=Files.walk(path.get(path,“orders”,“html”))
.map(路径::toFile)
.map(此::readFileToString)
.map(内容->{
订单=新订单();
evaluateXPath(“//*[@id='page']/div[2]/div[1]/div[3]/div[2]/span[2]/text()”,内容)
.如果存在(x->{
字符串[]结果=x.split(“”);
如果(results.length>=3){
StringBuilder StringBuilder=新的StringBuilder();
对于(int i=0;i
我的问题是如何将这一部分(我认为它非常冗长)重写为一个更整洁的实现

StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < results.length - 2; i++) {
    stringBuilder.append(results[i]);
}
order.setConsignee(stringBuilder.toString());
StringBuilder StringBuilder=新建StringBuilder();
对于(int i=0;i

欢迎任何建议,即使是关于我代码的另一部分。

您可以改变它:

Stream.of(results).limit(results.length-2).collect(Collectors.joining())
if (results.length >= 3) {
    Deque<String> resultList = new ArrayDeque<>(Arrays.asList(results));
    order.setAddress(resultList.removeLast());
    order.setPhoneNumber(resultList.removeLast());
    order.setConsignee(String.join("", resultList));
}
if(results.length>=3){
Deque resultList=newarraydeque(Arrays.asList(results));
setAddress(resultList.removeLast());
order.setPhoneNumber(resultList.removeLast());
set收货人(String.join(“,resultList));
}

您可以扭转局面:

if (results.length >= 3) {
    Deque<String> resultList = new ArrayDeque<>(Arrays.asList(results));
    order.setAddress(resultList.removeLast());
    order.setPhoneNumber(resultList.removeLast());
    order.setConsignee(String.join("", resultList));
}
if(results.length>=3){
Deque resultList=newarraydeque(Arrays.asList(results));
setAddress(resultList.removeLast());
order.setPhoneNumber(resultList.removeLast());
set收货人(String.join(“,resultList));
}

这真的很好。是
IntStream.range(0,results.length-1).mapToObj(i->results[i]).collect(连接(“”)“整洁”?是
String.join(“,Arrays.asList(results).subList(0,results.length-1))
,“neater”?但无需在
连接中指定
。我也应该这样做。这真的很好。是
IntStream.range(0,results.length-1).mapToObj(i->results[i]).collect(连接(“”)“整洁”?是
String.join(“,Arrays.asList(results).subList(0,results.length-1))
,“neater”?但无需在
连接中指定
。我们也应该这样做。