我上课了
class Person {
String name;
....
Optional<Integer> children;
}
Run Code Online (Sandbox Code Playgroud)
如何使用流来获取所有孩子的总数?
public int totalCount(final Set<Person> people) {
int total = 0;
for (Person person : people) {
if (person.getChildren().isPresent()) {
total += person.getChildren().get();
}
}
return total;
}
Run Code Online (Sandbox Code Playgroud)
如何使用Java 8流做到这一点?
public int totalCount(final Set<Person> people) {
int total = 0;
people.stream()
.filter(p -> p.getChildren().isPresent())
// ???
}
Run Code Online (Sandbox Code Playgroud) 为什么我不能调用stream()数组类型Enum?
DummyEnum[] array = DummyEnum.values();
array.stream(); // Compile Error
Run Code Online (Sandbox Code Playgroud)
ENUM:
public enum DummyEnum {
Hello("Hello"), Welcome("Welcome");
private String greeting;
private DummyEnum(final String greeting) {
this.greeting = greeting;
}
public String getValue() {
return greeting;
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个CSV文件,第一行有一个标题.我想将其转换为List<Map<String, String>>,其中Map<String, String>列表中的每个代表文件中的记录.地图的关键是标题,值是字段的实际值.到目前为止我所拥有的:
BufferedReader br = <handle to file>;
// Get the headers to build the map.
String[] headers = br.lines().limit(1).collect(Collectors.toArray(size -> new String[size]));
Stream<String> recordStream = br.lines().skip(1);
Run Code Online (Sandbox Code Playgroud)
我可以执行哪些进一步操作recordStream以便将其转换为List<Map<String, String>>?
示例CSV文件是:
header1,header2,header3 ---- Header line
field11,field12,field13 ----> need to transform to Map where entry would be like header1:field11 header2:field12 and so on.
field21,field22,field23
field31,field32,field33
Run Code Online (Sandbox Code Playgroud)
最后,需要将所有这些地图收集到列表中.
是否可以仅使用元素索引从另一个列表创建子列表?我正在寻找一个很好的解决方案,例如lambdas,来自Java 8的流.
例如(伪代码):
a = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
b = a.getByIndices([0, 2, 4, 5, 3])
print(b) // [10, 8, 6, 5, 7]
Run Code Online (Sandbox Code Playgroud) LocalDate即使运行期间没有错误,为什么不改变?
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse("2005-12-12", formatter);
date.plusDays(3);
System.out.println(date.toString());
Run Code Online (Sandbox Code Playgroud)
输出:
2005-12-12
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
使用oracle java 1.8.0_25
我有以下结构
URL url = new URL(new URL(new URL("http://localhost:4567/"), "123"), "asd")
Run Code Online (Sandbox Code Playgroud)
根据https://docs.oracle.com/javase/tutorial/networking/urls/creatingUrls.html中的文档,
它应该生成http://localhost:4567/123/asd
但是它产生的URLhttp://localhost:4567/asd
文件说明
此代码段使用URL构造函数,该构造函数允许您从另一个URL对象(基础)和相对URL规范创建URL对象.这个构造函数的一般形式是:
URL(URL baseURL, String relativeURL)
第一个参数是一个URL对象,它指定新URL的基础.第二个参数是一个String,它指定相对于base的资源名称的其余部分.如果baseURL为null,则此构造函数将relativeURL视为绝对URL规范.相反,如果relativeURL是绝对URL规范,则构造函数会忽略baseURL.
这是正确的行为吗?
有一个清单.
List<String> items = new ArrayList<>();
items.add("abcd");
items.add("efgh");
items.add("ijkl");
items.add("mnop");
Run Code Online (Sandbox Code Playgroud)
我想在控制台中打印编号
1. abcd
2. efgh
3. ijkl
4. mnop
Run Code Online (Sandbox Code Playgroud)
我是Java 8的初学者.我正在尝试使用java 8的几个技巧.请帮忙.
我试图在装有Arch Linux的Macbook上运行Intellij Idea 14。我已经安装了Idea和从AUR安装的Oracle JDK8。
当我运行idea.sh时,将显示初始屏幕,并在完成加载后打开此屏幕。
这是idea.log:
2015-10-29 17:02:33,298 [ 0] INFO - #com.intellij.idea.Main - ------------------------------------------------------ IDE STARTED ------------------------------------------------------
2015-10-29 17:02:33,312 [ 14] INFO - #com.intellij.idea.Main - IDE: IntelliJ IDEA (build #IC-141.2735.5, 22 Sep 2015 00:00)
2015-10-29 17:02:33,312 [ 14] INFO - #com.intellij.idea.Main - OS: Linux (4.2.3-1-arch, amd64)
2015-10-29 17:02:33,312 [ 14] INFO - #com.intellij.idea.Main - JRE: 1.8.0_66-b17 (Oracle Corporation)
2015-10-29 17:02:33,312 [ 14] INFO - #com.intellij.idea.Main - JVM: 25.66-b17 (Java HotSpot(TM) 64-Bit Server VM)
2015-10-29 17:02:33,314 [ …Run Code Online (Sandbox Code Playgroud) 假设我有一个int列表
1,2,3,4,5,6,7,8,9,10
Run Code Online (Sandbox Code Playgroud)
如果数字是偶数,如何添加,如果数字是奇数,如何减去?我可以使用for循环执行此操作,但我想知道如何使用stream和Java等新的Java 8功能filter
如果我们成像,我们有一个名为person的对象,而人看起来像下面这样:
class Person {
int id;
String name;
String country
// ...
// getter/setter
}
Run Code Online (Sandbox Code Playgroud)
我们有一个List的Person对象,我们要"转换"到一个地图.我们可以使用以下内容:
Map<Long, List<Person>> collect = personList.stream().
collect(Collectors.toMap(Person::getId, p -> p));
Run Code Online (Sandbox Code Playgroud)
但是可以返回valuemapper的默认值并更改valuemapper的类型?
我想过这样的事情:
Map<Long, List<Person>> collect =
personList.stream().collect(Collectors.groupingBy(Person::getId, 0));
Run Code Online (Sandbox Code Playgroud)
但有了这个我得到以下错误 is not applicable for the arguments
我有一个解决方法,但我认为它不是很漂亮.
Map<Long, Object> collect2 = personList.stream().
collect(Collectors.toMap(Person::getId, pe -> {
return 0;
}));
Run Code Online (Sandbox Code Playgroud) java-8 ×10
java ×8
java-stream ×3
archlinux ×1
collectors ×1
construction ×1
dictionary ×1
enums ×1
intellij-14 ×1
java-time ×1
lambda ×1
linux ×1
list ×1
sublist ×1
url ×1