标签: java-8

为什么StringBuilder#append(int)在Java 7中比在Java 8中更快?

在研究使用和将整数原语转换为字符串的一些小辩论时"" + n,Integer.toString(int)我编写了这个JMH微基准测试:

@Fork(1)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@State(Scope.Benchmark)
public class IntStr {
    protected int counter;


    @GenerateMicroBenchmark
    public String integerToString() {
        return Integer.toString(this.counter++);
    }

    @GenerateMicroBenchmark
    public String stringBuilder0() {
        return new StringBuilder().append(this.counter++).toString();
    }

    @GenerateMicroBenchmark
    public String stringBuilder1() {
        return new StringBuilder().append("").append(this.counter++).toString();
    }

    @GenerateMicroBenchmark
    public String stringBuilder2() {
        return new StringBuilder().append("").append(Integer.toString(this.counter++)).toString();
    }

    @GenerateMicroBenchmark
    public String stringFormat() {
        return String.format("%d", this.counter++);
    }

    @Setup(Level.Iteration)
    public void prepareIteration() {
        this.counter = 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用默认的JMH选项运行它,我的Linux机器上都存在两个Java VM(最新的Mageia 4 64位,Intel i7-3770 CPU,32GB …

java performance java-7 java-8 jmh

76
推荐指数
2
解决办法
9972
查看次数

使用Java 8的Monads

为了帮助理解monad是什么,有人可以使用java提供一个例子吗?他们有可能吗?

如果你从这里下载预发布的lambda兼容JDK8,可以使用java表达lambda表达式http://jdk8.java.net/lambda/

使用此JDK的lambda示例如下所示,有人可以提供相对简单的monad吗?

public interface TransformService {
        int[] transform(List<Integer> inputs);
    }
    public static void main(String ars[]) {
        TransformService transformService = (inputs) -> {
            int[] ints = new int[inputs.size()];
            int i = 0;
            for (Integer element : inputs) {
                ints[i] = element;
            }
            return ints;
        };

        List<Integer> inputs = new ArrayList<Integer>(5) {{
            add(10);
            add(10);
        }};
        int[] results = transformService.transform(inputs);
    }
Run Code Online (Sandbox Code Playgroud)

java monads optional java-8

75
推荐指数
5
解决办法
3万
查看次数

Java 8:使用换行符和缩进格式化lambda

我想用lambda缩进实现的目的如下:

多行声明:

String[] ppl = new String[] { "Karen (F)", "Kevin (M)", "Lee (M)", "Joan (F)", "Des (M)", "Rick (M)" };
List<String> strings = Arrays.stream(ppl)
                         .filter(
                             (x) -> 
                             {
                                 return x.contains("(M)");
                             }
                         ).collect(Collectors.toList());
strings.stream().forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

单行声明:

List<String> strings = Arrays.stream(ppl)
                         .map((x) -> x.toUpperCase())
                         .filter((x) -> x.contains("(M)"))
                         .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)



目前,Eclipse正在自动格式化为以下内容:

多行声明:

String[] ppl = new String[] { "Karen (F)", "Kevin (M)", "Lee (M)", "Joan (F)", "Des (M)", "Rick (M)" };
List<String> strings = Arrays.stream(ppl).filter((x) ->
{
    return x.contains("(M)");
}).collect(Collectors.toList());
strings.stream().forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

单行声明:

String[] ppl …
Run Code Online (Sandbox Code Playgroud)

java eclipse lambda java-8 java-stream

75
推荐指数
6
解决办法
4万
查看次数

Java 8供应商和消费者对外行的解释

作为一名学习Java的非Java程序员,我正在阅读SupplierConsumer接口.我无法围绕他们的用法和意义.您何时以及为何使用这些界面?有人可以给我一个简单的非专业人士的例子......我发现Doc的例子不够简洁,我的理解.

java java-8

75
推荐指数
5
解决办法
5万
查看次数

如何将Java 8流收集到Guava ImmutableCollection中?

我想做以下事情:

List<Integer> list = IntStream.range(0, 7).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

但是在某种程度上,结果列表是Guava的实现ImmutableList.

我知道我能做到

List<Integer> list = IntStream.range(0, 7).collect(Collectors.toList());
List<Integer> immutableList = ImmutableList.copyOf(list);
Run Code Online (Sandbox Code Playgroud)

但是我想直接收集它.我试过了

List<Integer> list = IntStream.range(0, 7)
    .collect(Collectors.toCollection(ImmutableList::of));
Run Code Online (Sandbox Code Playgroud)

但它引发了一个例外:

com.google.common.collect.ImmutableCollection.add(ImmutableCollection.java:96)中的java.lang.UnsupportedOperationException

guava java-8 java-stream

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

为什么Stream.allMatch()为空流返回true?

我的同事和我有一个错误是由于我们假设空流调用allMatch()将返回false.

if (myItems.allMatch(i -> i.isValid()) { 
    //do something
}
Run Code Online (Sandbox Code Playgroud)

当然,假设而不是阅读文档是我们的错.但我不明白为什么allMatch()空流的默认行为返回true.这是什么原因?就像anyMatch()(相反地返回false)一样,这个操作以一种离开monad并且可能在if声明中使用的命令性方式使用.考虑到这些事实,是否有任何理由为什么在大多数用途中需要allMatch()默认为true空流?

java lambda java-8 java-stream

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

Java 8 Comparator类型推断非常困惑

我一直在研究Collections.sort和之间的区别list.sort,特别是关于使用Comparator静态方法以及lambda表达式中是否需要param类型.在我们开始之前,我知道我可以使用方法引用,例如Song::getTitle克服我的问题,但我的查询并不是我想修复的东西,而是我想要的答案,即为什么Java编译器以这种方式处理它.

这是我的发现.假设我们有一个ArrayList类型Song,添加了一些歌曲,有3种标准的get方法:

    ArrayList<Song> playlist1 = new ArrayList<Song>();

    //add some new Song objects
    playlist.addSong( new Song("Only Girl (In The World)", 235, "Rhianna") );
    playlist.addSong( new Song("Thinking of Me", 206, "Olly Murs") );
    playlist.addSong( new Song("Raise Your Glass", 202,"P!nk") );
Run Code Online (Sandbox Code Playgroud)

这里调用两种类型的排序方法,没问题:

Collections.sort(playlist1, 
            Comparator.comparing(p1 -> p1.getTitle()));

playlist1.sort(
            Comparator.comparing(p1 -> p1.getTitle()));
Run Code Online (Sandbox Code Playgroud)

一旦我开始连锁thenComparing,就会发生以下情况:

Collections.sort(playlist1,
            Comparator.comparing(p1 -> p1.getTitle())
            .thenComparing(p1 -> p1.getDuration())
            .thenComparing(p1 -> p1.getArtist())
            );

playlist1.sort(
        Comparator.comparing(p1 -> p1.getTitle())
        .thenComparing(p1 -> p1.getDuration()) …
Run Code Online (Sandbox Code Playgroud)

java sorting lambda comparator java-8

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

为现有Stream添加新值

是否有一种向现有添加新值的好方法Stream?我能想象的就像这样:

public <T> Stream<T> addToStream(Stream<T> stream, T elem ) {
    List<T> result = stream.collect(Collectors.toList());
    result.add(elem);
    return result.stream();
}
Run Code Online (Sandbox Code Playgroud)

但我正在寻找一些更简洁的东西,我可以在lambda表达中使用而没有冗长.

当我尝试实施PECS原则时出现了另一个问题:

public <T> Stream<? super T> addToStream(Stream<? super T> stream, T elem ) {
    List<? super T> result = stream.collect(Collectors.toList()); //error
    result.add(elem);
    return result.stream();
}
Run Code Online (Sandbox Code Playgroud)

看起来像通配符不起作用Stream.collect,我想知道为什么.提前致谢.

java wildcard java-8

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

- > < - 运算符有什么作用?

我最近发现了以下代码:

IntPredicate neg = x -> x <- x;
Run Code Online (Sandbox Code Playgroud)

这是什么,某种反向双lambda?

java syntax obfuscation lambda java-8

73
推荐指数
1
解决办法
3194
查看次数

如何将Instant转换为日期格式?

我可以通过这种方式将a转换java.util.Datejava.time.Instant(Java 8及更高版本):

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 8);
cal.set(Calendar.MINUTE, 30);
Date startTime = cal.getTime();
Instant i = startTime.toInstant();
Run Code Online (Sandbox Code Playgroud)

有人能告诉我有关特定日期和时间格式的即时转换吗?即2015-06-02 8:30:00

我已经通过api但找不到满意的答案.

java datetime date simpledateformat java-8

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