标签: java-8

Arrays.sort()和Arrays.parallelSort()之间的区别

正在浏览这里Java 8提到的功能.无法理解究竟是什么.有人可以解释一下和之间的实际区别是什么?parallelSort()sort()parallelSort()

java arrays sorting java-8

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

Java 8 Stream,获得头尾

Java 8引入了一个类似Scala的StreamStream类,这是一个功能强大的惰性结构,使用它可以非常简洁地执行这样的操作:

def from(n: Int): Stream[Int] = n #:: from(n+1)

def sieve(s: Stream[Int]): Stream[Int] = {
  s.head #:: sieve(s.tail filter (_ % s.head != 0))
}

val primes = sieve(from(2))

primes takeWhile(_ < 1000) print  // prints all primes less than 1000
Run Code Online (Sandbox Code Playgroud)

我想知道是否有可能在Java 8中这样做,所以我写了这样的东西:

IntStream from(int n) {
    return IntStream.iterate(n, m -> m + 1);
}

IntStream sieve(IntStream s) {
    int head = s.findFirst().getAsInt();
    return IntStream.concat(IntStream.of(head), sieve(s.skip(1).filter(n -> n % head != 0)));
}

IntStream primes …
Run Code Online (Sandbox Code Playgroud)

java scala sieve java-8 java-stream

23
推荐指数
1
解决办法
9330
查看次数

使用Gson反序列化Java 8 LocalDateTime

我有一个日期时间属性的JSON,格式为"2014-03-10T18:46:40.000Z",我想使用Gson将其反序列化为java.time.LocalDateTime字段.

当我尝试反序列化时,我收到错误:

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING
Run Code Online (Sandbox Code Playgroud)

java json gson java-8

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

23
推荐指数
2
解决办法
2603
查看次数

Java 8:使用静态方法而不是静态util类接口

当我需要一堆无状态实用程序方法时,Java 8中的最佳实践是什么.是不是有将一个接口不会被任何人,即实现public interface Signaturespublic interface Environments,或者是更好的做旧的方式-有public final class Signaturespublic final class Environments私人构造|| 枚举?

java static java-8

23
推荐指数
2
解决办法
4040
查看次数

为什么Java 8为方法引用引入了新的"::"运算符?

在Java 8中,方法引用是使用::运算符完成的.

例如

// Class that provides the functionality via it's static method
public class AddableUtil {
  public static int addThemUp(int i1, int i2){
    return i1+i2;
  }
}

// Test class
public class AddableTest {
  // Lambda expression using static method on a separate class
  IAddable addableViaMethodReference = AddableUtil::addThemUp;
  ...
}
Run Code Online (Sandbox Code Playgroud)

你可以看到addableViaMethodReference现在的行为就像是一个别名AddableUtil::addThemUp.因此addableViaMethodReference()将执行相同的操作 AddableUtil.addThemUp()并返回相同的值.

他们为什么选择引入新的运营商而不是现有运营商?我的意思是,当函数名称结束时执行函数,()并在没有尾随时返回函数引用().

方法执行

AddableUtil.addThemUp();
Run Code Online (Sandbox Code Playgroud)

方法参考

AddableUtil.addThemUp;
Run Code Online (Sandbox Code Playgroud)

这不是更简单直观吗?AFAIK,AddableUtil.addThemUp当前不(Java 7)用于任何其他目的并抛出编译错误.为什么不利用这个机会而不是创建一个全新的运营商呢?

java java-8 method-reference

23
推荐指数
2
解决办法
2598
查看次数

如何在Java 8中使用collect调用?

让我们说我们必须使用这段无聊的代码:

ArrayList<Long> ids = new ArrayList<Long>();
for (MyObj obj : myList){
    ids.add(obj.getId());
}
Run Code Online (Sandbox Code Playgroud)

切换到Java 8后,我的IDE告诉我我可以用这个代码替换collect call它,并自动生成:

ArrayList<Long> ids = myList.stream().map(MyObj::getId).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

但是它给了我这个错误:

Steam中的collect(java.util.stream.Collector)无法应用于:(java.util.stream.Collector,capture,java.util.List>)

我试图铸造参数,但它给我不确定的AR,而IDE没有给任何建议.

我很好奇你collect call在这种情况下如何使用,我找不到任何可以指导我的信息.任何人都可以光明吗?

java collect java-8 java-stream

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

Stream.forEach是否遵循顺序流的遭遇顺序?

Javadoc Stream.forEach表示(强调我的):

此操作的行为明确是不确定的.对于并行流管道,此操作不保证遵守流的遭遇顺序,因为这样做会牺牲并行性的好处.对于任何给定元素,可以在任何时间以及库选择的任何线程中执行该动作.如果操作访问共享状态,则它负责提供所需的同步.

Java 9 Early Access Javadoc中提供了相同的文本.

第一句("明确不确定")表明(但没有明确说明)此方法不会保留遭遇顺序.但是明确说明顺序没有保留的下一个句子是以"For parallel stream pipeline"为条件的,如果不管并行性如何应用该句子,那么这个条件就没有了.这让我不确定forEach是否会保留顺序流的顺序.

这个答案指出了流库实现调用的位置.sequential().forEach(downstream).这表明forEach旨在保留顺序流的顺序,但也可能只是库中的错误.

我通过使用forEachOrdered安全的方式回避了我自己的代码中的这种模糊性,但今天我发现NetBeans IDE的"使用功能操作"编辑器提示将转换

for (Foo foo : collection)
    foo.bar();
Run Code Online (Sandbox Code Playgroud)

collection.stream().forEach((foo) -> {
    foo.bar();
});
Run Code Online (Sandbox Code Playgroud)

如果forEach不保留遭遇顺序,则会引入错误.在我报告针对NetBeans的错误之前,我想知道库实际上保证了什么,并由源备份.

我正在寻找权威人士答案.这可能是图书馆实施中的一个明确的评论,关于Java开发邮件列表的讨论(谷歌没有找到任何东西,但我可能不知道这些神奇的词汇),或者是图书馆设计师的声明(其中我知道两个,Brian GoetzStuart Marks,积极参与Stack Overflow).(请不要回答"只是使用forEachOrdered" - 我已经这样做了,但我想知道代码是否错误.)

java java-8 java-stream

23
推荐指数
1
解决办法
1300
查看次数

将对象属性列表加入String

我现在正在学习lambda,我想知道如何用lambda一行编写这段代码.

我有一个Person包括IDname字段的类

目前,我有一个List<Person>存储这些Person对象.我想要完成的是获取一个由人的id组成的字符串.

"id1,id2,id3".

我怎样才能用lambda实现这个目标?

java lambda java-8 java-stream

23
推荐指数
2
解决办法
7452
查看次数

HashMap重新散列/调整容量

A HashMap有一个来自它的文档的短语:

如果初始容量大于最大条目数除以加载因子,则不会发生重新加载操作.

注意文档怎么说的老调重弹,没有调整 -即使翻版只会当调整大小会发生; 那就是当桶的内部大小增加两倍时.

当然HashMap,我们可以提供这样一个构造函数来定义这个初始容量.

使用指定的初始容量和默认加载因子(0.75)构造一个空的HashMap.

好的,似乎很容易:

// these are NOT chosen randomly...    
List<String> list = List.of("DFHXR", "YSXFJ", "TUDDY", 
          "AXVUH", "RUTWZ", "DEDUC", "WFCVW", "ZETCU", "GCVUR");

int maxNumberOfEntries = list.size(); // 9
double loadFactor = 0.75;

int capacity = (int) (maxNumberOfEntries / loadFactor + 1); // 13
Run Code Online (Sandbox Code Playgroud)

所以容量是13(内部是16- 下一个2的幂),这样我们保证文档部分不重复.好吧,让我们测试一下,但首先介绍一个方法,进入HashMap并查看值:

private static <K, V> void debugResize(Map<K, V> map, K key, V value) throws Throwable …
Run Code Online (Sandbox Code Playgroud)

java hashmap java-8

23
推荐指数
1
解决办法
610
查看次数