我正在读取结构如下的 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。
(是的,这是为了家庭作业,但我不想要整个解决方案,只想要工作的一小部分。)
旧源系统的历史表有 2 个有关日期/时间的字段:日期(例如:12/20/2017)字符串和时间(14:33:00)字符串。我没有可以使用的时区信息。我正在创建的 Web 服务正在由 UI 团队使用,该团队希望将此信息作为 ISO 8601 格式的字符串。我正在使用 Java 8。是否可以创建 ISO 8601 格式的字符串版本以在没有时区的情况下返回 UI?
我一直在尝试使用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,但是,这方面运气不佳。
我阅读了教程“参考特定类型的任意对象的实例方法”。这是链接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 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 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) 在我的代码中,我有一个如下所示的类
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);
当我们查看生成的对象时,我们会发现它 …
我有一个像“出租车或公交车司机”这样的字符串列表。我需要将每个单词的第一个字母转换为大写字母,除了单词“or”。有没有简单的方法可以使用Java流来实现这一点。我尝试过使用 Pattern.compile.splitasstream 技术,我无法将所有分割的标记连接回形成原始字符串,任何帮助将不胜感激。如果任何机构需要我可以在此处发布我的代码。
给定一个添加到 DoubleProperty 的侦听器,是否可以像使用 Observable 列表一样将 DoubleProperty 更改的数量传递给侦听器?
someDoubleProperty.addListener(e -> {
// System.out.println(e.change());
});
Run Code Online (Sandbox Code Playgroud) 我是 Java 8 Streams和Collectors类的新手。
我正在读取一个文件,其内容需要保存在一个文件中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-8 ×10
java ×8
java-stream ×4
collectors ×1
iso8601 ×1
jackson ×1
java-time ×1
listener ×1
lombok ×1
option-type ×1
properties ×1
timezone ×1