标签: java-8

Java 流到 String[] 数组

我正在读取结构如下的 CSV 文件:

1;Miller Hame; 1,2,3,4,5.....; 1232323;
Run Code Online (Sandbox Code Playgroud)

我必须把它分成String[],我可以处理每一行,每一行"Part"

到目前为止我的代码:

Stream<String> input = java.nio.file.Files.lines(java.nio.file.Paths.get("data.csv"));

String[] lines = input.skip(1)
        .map(s->s.split(";"))
        .toArray(String[]::new);
Run Code Online (Sandbox Code Playgroud)

事实上我正在得到java.lang.ArrayStoreException

(是的,这是为了家庭作业,但我不想要整个解决方案,只想要工作的一小部分。)

java java-8 java-stream

2
推荐指数
1
解决办法
4209
查看次数

在 Java 中,我可以将日期和时间转换为没有时区的 ISO 8601 格式的字符串吗?

旧源系统的历史表有 2 个有关日期/时间的字段:日期(例如:12/20/2017)字符串和时间(14:33:00)字符串。我没有可以使用的时区信息。我正在创建的 Web 服务正在由 UI 团队使用,该团队希望将此信息作为 ISO 8601 格式的字符串。我正在使用 Java 8。是否可以创建 ISO 8601 格式的字符串版本以在没有时区的情况下返回 UI?

java timezone iso8601 date-formatting java-8

2
推荐指数
1
解决办法
6066
查看次数

流:通过供应商和累加器收集

我一直在尝试使用Stream 的收集方法,将列表转换为 HashMap。我使用下面的代码作为参考:

String result = list.parallelStream().collect(StringBuilder::new,
            (response, element) -> response.append(" ").append(element),
            (response1, response2) -> response1.append(",").append(response2.toString()))
            .toString();
Run Code Online (Sandbox Code Playgroud)

当我在 eclipse 中编写以下不完整的语句并在 ? 处执行ctrl+操作时space

Map<String,Choice> map1=  list1.stream().collect(()-> new HashMap<String,Choice>(), 
        (r,s) -> r.?,(r,s) -> r.putAll(s));
Run Code Online (Sandbox Code Playgroud)

考虑到使用 StringBuilder 的代码片段,我的期望是,累加器函数的第一个参数应该是 HashMap,因为我已使用 HashMap::new 作为供应商函数。根据这种理解,eclipse应该建议我使用HashMap的方法,但事实并非如此。

然而,这似乎工作正常

list1.stream().collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
Run Code Online (Sandbox Code Playgroud)

已经提到了Java 8 Int Stream Collect with StringBuilder,但是,这方面运气不佳。

java java-8 java-stream

2
推荐指数
1
解决办法
1万
查看次数

无法对非静态方法进行静态引用

我阅读了教程“参考特定类型的任意对象的实例方法”。这是链接https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html

所以我编写了自己的代码,但无法删除错误。 Arrays.sort(arr, String::compareToIgnoreCase);是一个合法的声明,但 Consumer m2 =Myclass::doit;给出了一个错误。如何解决这个错误?对特定类型的任意对象的实例方法的引用的概念是否适用于像 String 这样的 java 内置类?

这是我的代码

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;

interface Myinter {
 void doit(List<String> s);
}
public class Myclass implements Myinter {
    public static void main(String[] args) {
        List<String> obj = new ArrayList<String>();
        obj.add("raj");
        obj.add("gopal");
        obj.add("bhallamudi");
        String arr[] = new String[obj.size()];
        arr = obj.toArray(arr);
        Arrays.sort(arr, String::compareToIgnoreCase);
        for (String s : arr)
            System.out.println(s + " ");

          Consumer<List<String>> m2 =Myclass::doit;
          m2.accept(obj);
    }
    @Override
    public void doit(List<String> …
Run Code Online (Sandbox Code Playgroud)

java java-8 method-reference

2
推荐指数
1
解决办法
1225
查看次数

Java 8在一段时间后过期

无法弄清楚如何在 java 8(没有日历)中执行这个简单的方法:

 import java.time.Duration;
 import java.util.Date;
  [...]
/**
 * true if date + duration is before now()
 * @param date 
 * @param d
 * @return
 */
public static boolean isDateExpired (Date date, Duration d) {
 // how to do ?
}
Run Code Online (Sandbox Code Playgroud)

java java-8 java-time

2
推荐指数
1
解决办法
1215
查看次数

使用 Java 8 通过 LongStream 批量处理 ArrayList

我正在尝试使用 Java 8 的 LongStream 处理具有 Long 类型内容的 ArrayList,如下面给定的示例所示,但出现以下错误。

import java.util.*;
import java.util.stream.*;

 public class HelloWorld{
 public static void main(String []args){
    List<Long> data=new LinkedList();
     for(Long j=0L;j<300L;j++){
        data.add(j);
    }
   int BATCH = 10;

   LongStream.range(0, (data.size()+BATCH-1)/BATCH)
     .mapToLong(i -> data.subList(i*BATCH, Math.min(data.size(), (i+1)*BATCH)))
     .forEach(batch -> process(batch));
 }

static void process(List<Long> list){
     System.out.println(list);
 }
}
Run Code Online (Sandbox Code Playgroud)

但我得到以下例外。我尝试过使用mapToLong插入地图,但mapToLong未被识别

$javac HelloWorld.java
 HelloWorld.java:13: error: incompatible types: possible lossy 
 conversion from long to int
     .map(i -> data.subList(i*BATCH, Math.min(data.size(), 
 (i+1)*BATCH)))
                             ^
HelloWorld.java:14: error: incompatible types: long cannot be 
converted to List<Long> …
Run Code Online (Sandbox Code Playgroud)

java-8

2
推荐指数
1
解决办法
2157
查看次数

Lombok @Builder.Default 强制默认可选值为 null

在我的代码中,我有一个如下所示的类

public enum Test {
    VALUE1,
    VALUE2
}

@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class MyClass {
  @JsonProperty(name = "test")
  private Optional<Test> test = Optional.empty();

}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但会出现以下错误:

警告:@Builder 将完全忽略初始化表达式。

太好了,让我补充一下@Builder.Default...

@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class MyClass {
  @Builder.Default
  @JsonProperty(name = "test", required = true)
  private Optional<Test> test = Optional.empty();  
}
Run Code Online (Sandbox Code Playgroud)

这修复了错误,但现在,test当该值不存在时,该值将被强制为 null,而不是Optional.empty。我想保留可选模式并让对象的用户决定他们想要如何处理可选,而不是 Lombok 或 Jackson。

有没有办法让这项工作保持默认值Optional.empty()?如果没有,有没有办法可以忽略这个警告,因为它无法修复?

编辑:

想象一下,我们将一个有效负载传递到某个空的端点(因为我们想测试对象中唯一值的可选)

POST /my/end/point

有效负载将是{}

然后我们使用 Jackson 取回对象

MyClass result = mapper.readValue(payload, MyClass.class);

当我们查看生成的对象时,我们会发现它 …

jackson lombok java-8 option-type

2
推荐指数
1
解决办法
1万
查看次数

使用java 8流转换为大写字母

我有一个像“出租车或公交车司机”这样的字符串列表。我需要将每个单词的第一个字母转换为大写字母,除了单词“or”。有没有简单的方法可以使用Java流来实现这一点。我尝试过使用 Pattern.compile.splitasstream 技术,我无法将所有分割的标记连接回形成原始字符串,任何帮助将不胜感激。如果任何机构需要我可以在此处发布我的代码。

java java-8 java-stream

2
推荐指数
1
解决办法
1万
查看次数

使用侦听器和 DoubleProperty 获取找零金额

给定一个添加到 DoubleProperty 的侦听器,是否可以像使用 Observable 列表一样将 DoubleProperty 更改的数量传递给侦听器?

someDoubleProperty.addListener(e -> {
 // System.out.println(e.change());
});
Run Code Online (Sandbox Code Playgroud)

java properties listener java-8

2
推荐指数
1
解决办法
944
查看次数

如何在java 8中使用收集器和流自动递增哈希图的键

我是 Java 8 StreamsCollectors类的新手。

我正在读取一个文件,其内容需要保存在一个文件中LinkedHashMap<Integer, String>,其中它<keys>是文件的行号,它<values>是每行的内容。

在这里,我想使用这个Stream概念,但我无法使用Collectors.toMap自动递增<keys>,它需要保存在LinnkedHashMap对象中。相反,我得到了例外。

以下是我正在尝试的代码:

List<String> list = new ArrayList<>();
Integer count = 0;

try (BufferedReader br = Files.newBufferedReader( Paths.get( fileName ) )) {
    // br returns as stream and convert it into a List
    list = br.lines().collect( Collectors.toList() );
}
catch ( IOException e ) {
    e.printStackTrace();
}

list.forEach( System.out::println );

Map<Integer, String> fileNumWithContentMapper = list.stream()
        .collect( Collectors.toMap( n->n+1,s1->s1));
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream collectors

2
推荐指数
1
解决办法
7251
查看次数