javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

空安全集合作为Java 8中的流

我正在寻找可以收集流的方法,但是它是无效的。 如果collection为null,则返回空流。 像这样:

Utils.nullSafeStream(collection).filter(...);

我创建了自己的方法:

public static <T> Stream<T> nullSafeStream(Collection<T> collection) {
    if (collection == null) {
        return Stream.empty();
    }
    return collection.stream();
}

但是我很好奇,如果标准的JDK中有类似的东西?

trans by 2020-08-12T05:58:24Z

什么是Java流中的“转义符操作”?

我在阅读Java文档,遇到了这句话:

除了转义填充操作iterator()spliterator()之外,执行在调用终端操作时开始,并在终端操作完成时结束。

我不确定“转义线操作”是什么意思。 有人可以解释这个名词吗?

trans by 2020-08-11T20:47:52Z

java-DateTimeFormatter支持月份的单个数字天和月份的Y

DateTimeFormatter似乎无法处理每月的一位数字:

String format = "MM/dd/yyyy";
String date   = "5/3/1969";
System.out.println(new SimpleDateFormat(format).parse(date));
System.out.println(LocalDate.parse(date, DateTimeFormatter.ofPattern(format)));

在此的示例DateTimeFormatter正确解析日期,但DateTimeFormatter引发异常。 如果我要使用零填充日期,例如“ 05/03/1969”,则两者都可以。 但是,如果月份中的某天或年份中的某一个是一位数字,则DateTimeFormatter会引发异常。

什么是正确的DateTimeFormatter格式,可以同时解析月份的一位数和两位数以及一年中的月份?

trans by 2020-08-11T12:40:17Z

从Java 8流中获取第n个元素

假设我有一个这样的列表:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

是否可以使用Java 8流从此列表中获取第二个元素来获取以下内容?

[1, 3, 5, 7, 9]

也许甚至每三个元素?

[1, 4, 7, 10]

基本上,我正在寻找一个函数来获取流的第n个元素:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> list2 = list.stream().takenth(3).collect(Collectors.toList());
System.out.println(list2);
// => [1, 4, 7, 10]
trans by 2020-08-10T19:56:42Z

为什么在Java 8中编译该通用代码?

我偶然发现了一段代码,我想知道为什么编译成功:

public class Main {
    public static void main(String[] args) {
        String s =  newList(); // why does this line compile?
        System.out.println(s);
    }

    private static <T extends List<Integer>> T newList() {
        return (T) new ArrayList<Integer>();
    }
}

有趣的是,如果我使用3005659957091101107841修改方法newList的签名,它将不再起作用。

评论和回复后更新:如果我将泛型类型从方法移至类,则代码将不再编译:

public class SomeClass<T extends List<Integer>> {
    public  void main(String[] args) {
        String s = newList(); // this doesn't compile anymore
        System.out.println(s);
    }

    private T newList() {
        return (T) new ArrayList<Integer>();
    }
}
trans by 2020-08-10T19:50:08Z

java-在性能Lambda或简单循环方面哪个更好?

这个问题已经在这里有了答案:

  • Java 8 Iterable.forEach()与foreach循环 8个答案

我已经快速阅读了Oracle Lambda Expression文档。

但是,这种示例有助于我更好地理解:

//Old way:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
for(Integer n: list) {
System.out.println(n);
}

//New way:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
list.forEach(n -> System.out.println(n));


//or we can use :: double colon operator in Java 8
list.forEach(System.out::println);

不过,我仍然不明白为什么它是如此创新。 这只是“方法变量”结束时消失的方法,对吗? 为什么要使用此方法而不是实际方法?就性能而言,这将是更好的选择。 Lambda或简单循环。

trans by 2020-08-08T21:40:44Z

Java 8减少链接的最佳方法

我有以下要改进的代码:

BigDecimal total = entity.getAssociate().stream().map(Associates::getPropertyA)
    .reduce(BigDecimal.ZERO, BigDecimal::add);
total = entity.getAssociate().stream().map(Associates::getPropertyB)
    .reduce(total, BigDecimal::add);
total = entity.getAssociate().stream().map(Associates::getPropertyC)
    .reduce(total, BigDecimal::add);
total = entity.getAssociate().stream().map(Associates::getPropertyD)
    .reduce(total, BigDecimal::add);

它可以工作,但确实感觉有更好的方法。 有人可以启发我吗?

trans by 2020-08-08T20:43:22Z

java-为什么SIZE常量仅对于Integer和Long是@Native?

我了解MAX_VALUE注释的使用。

指示可以引用定义常量值的字段 来自本机代码。 注释可以被以下工具用作提示: 生成本机头文件以确定头文件是否为 是必需的,如果是,则应包含哪些声明。

但是,在阅读Java源代码时,我注意到在类MAX_VALUEMIN_VALUE中,SIZE常量为@Native,而它不是用于Float,Byte,Double,Short和Character的。

请注意,SIZE常量表示用于表示实际值的位数。

public static final int SIZE = 8;//Byte
public static final int SIZE = 16;//Character
public static final int SIZE = 16;//Short
public static final int SIZE = 32;//Float
@Native public static final int SIZE = 32;//Integer
@Native public static final int SIZE = 64;//Long
public static final int SIZE = 64;//Double

编辑:我刚刚注意到,这也适用于相同类别的MAX_VALUEMIN_VALUE


编辑2:我有空闲时间对此进行一些研究,并查看Long,Float等类的头文件,我希望弄清楚其他头文件中没有常量,但不幸的是它们存在。

static const jint SIZE = 8L;//java/lang/Byte.h
static const jint SIZE = 16L;//java/lang/Character.h
static const jint SIZE = 16L;//java/lang/Short.h
static const jint SIZE = 32L;//java/lang/Float.h
static const jint SIZE = 32L;//java/lang/Integer.h
static const jint SIZE = 64L;//java/lang/Double.h
static const jint SIZE = 64L;//java/lang/Long.h

为什么SIZE仅对于Integer和Long为@Native常量?

trans by 2020-08-08T18:51:37Z

函数-为什么Java 8中没有BooleanConsumer?

恐怕这是一个愚蠢的问题。

有谁能告诉我为什么没有LongConsumerLongConsumer相反?

除了“因为根本就没有”以外,还有其他原因吗?

我应该创建自己的一个吗? 还是我想念其他东西?

public interface BooleanConsumer {

    void accept(boolean value);

    default BooleanConsumer andThen(final BooleanConsumer after) {
        return v -> {
            accept(v);
            after.accept(v);
        }
    }
}

更新资料

在哪里使用? 我正在写一个使用大量消费者和供应商的图书馆。 我成功地用LongConsumer写了一行代码,并且遇到了这样的情况:期望使用者接受来自方法结果的布尔值。 说Files.deleteIfExist

trans by 2020-08-06T06:41:57Z

java-将IntStream作为字符串输出的最简单方法

使用Java-8,我可以轻松地将String(或任何stars)当作String,使用charscodePoints方法。

IntStream chars = "Hello world.".codePoints();

然后,我可以操纵流的内容

IntStream stars = chars.map(c -> c == ' ' ? ' ': '*');

我一直在寻找一种打印结果的整洁方法,但我什至找不到简单的方法。 如何将starss的流放回可以像String一样打印的形式。

从上面的2999786171069316096我希望打印

***** ******
trans by 2020-08-05T10:43:20Z

在Java 8中,将Optional.empty中的空字符串的Optional <String>转换

给定一个字符串,我需要获取一个Optional,如果字符串为null或为空,则结果为Optional.empty。我可以这样:

String ppo = "";
Optional<String> ostr = Optional.ofNullable(ppo);
if (ostr.isPresent() && ostr.get().isEmpty()) {
    ostr = Optional.empty();
}

但是,肯定有一种更优雅的方法。

trans by 2020-08-05T08:13:55Z

Eclipse + Java 8支持吗?

如何使Java 8与Eclipse一起使用?

我已经遵循了本指南,但是没有用。 我也看过Eclipse Java 8 Wiki页面,但是他们没有解释如何使用检出的git存储库。

trans by 2020-08-05T05:56:00Z

排序-反转Java 8中的比较器

我有一个ArrayList并想按降序对其进行排序。 我用它Comparator方法。 这是根据Java API的描述:

返回由该流的元素组成的流,并根据提供的Comparator对其进行排序。

这种方法给我一种升序排序。 我应该更改哪个参数,以使其具有降序顺序?

trans by 2020-08-04T23:03:37Z

具有Collection或Lis的Java 8 CompletableFuture.allOf(...)

这个问题已经在这里有了答案:

  • 从List <Future>到Future <List>序列 8个答案

Java 8具有函数CompletableFuture<List<T>>,该函数返回CompletableFuture<List<T>>,当所有给定的期货完成时,该函数将完成。

但是,我几乎总是不处理CompletableFuture<List<T>>s的数组,而是处理List<CompletableFuture<T>>593。当然,我可以使用toArray()594方法,但是最终不得不在数组之间不断地来回转换有点麻烦。 和列表。

如果有一种巧妙的方法来获得CompletableFuture<List<T>>来代替List<CompletableFuture<T>>,那将是非常不错的,而不必不断地投入中间数组的创建。 有谁知道用Java 8做到这一点的方法吗?

trans by 2020-08-03T17:19:35Z

java-避免在Stream中出现NoSuchElementException

我有以下null

Stream<T> stream = stream();

T result = stream.filter(t -> {
    double x = getX(t);
    double y = getY(t);
    return (x == tx && y == ty);
}).findFirst().get();

return result;

但是,并非总是会出现以下错误的结果:

NoSuchElementException:没有值

那么,如果不存在任何值,如何返回null

trans by 2020-08-02T07:45:02Z

lambda-Java 8是否支持闭包?

我很困惑。 我以为Java8将会从石器时代浮出水面,并开始支持lambda / closures。 但是当我尝试:

public static void main(String[] args) {
    int number = 5;

    ObjectCallback callback = () -> {
        return (number = number + 1);
    };

    Object result = callback.Callback();
    System.out.println(result);
}

它说number should be effectively final。那是呃,我想不是闭包。 听起来好像是通过值而不是通过引用复制环境。

奖金问题!

Android是否支持Java-8功能?

trans by 2020-08-02T06:14:25Z

java-使用lambda将Map格式化为String

我有一个包含Integer键和值的地图。 我需要将其转换为具有以下特定格式的Stringkey1 - val1, key2 - val2, key3 - val3。现在,我使用forEach格式化每个元素,将它们收集到一个List中,然后执行String.join();。

List<String> ships = new ArrayList<>(4);
for (Map.Entry<Integer, Integer> entry : damagedMap.entrySet())
{
    ships.add(entry.getKey() + " - " + entry.getValue());
}
result = String.join(",", ships);

有什么更短的方法吗? 最好使用lambda,因为我需要一些使用lambda的练习。

trans by 2020-07-31T01:04:38Z

Java 8中Default或Defender方法的目的

Java 8包含了一个称为Defender方法的新功能,该功能允许在接口中创建默认方法实现。

现在,这首先是所有Java压缩程序员的巨大范式转变。 我查看了Brain Goetz所作的JavaOne 13演示,他在其中讨论了Collections库中新的CollectionparallelStream()实现。

为了在Collection界面中添加新方法,他们不能在不破坏先前版本的情况下添加新方法。 因此他告诉我们,为满足此需求,添加了Default方法的新功能。

public interface SimpleInterface {
  public void doSomeWork();

  //A default method in the interface created using "default" keyword
  default public void doSomeOtherWork(){
    System.out.println("DoSomeOtherWork implementation in the interface");
  }
}

现在我的问题是,基本方法是否在需要添加新方法而不破坏客户端代码时才有用? 还是还有其他用途?

trans by 2020-07-29T00:25:30Z

java-如何正确确定一个对象是lambda?

我看到lambda的类是getDeclaredMethods().length == 1,但我认为对于代理类来说可能同样如此。

当然,我可以检查getDeclaredMethods().length == 1并将regexp应用于类名。

但是我想知道是否有一个更优雅,更强大的选项来确定给定的对象是否为lambda。

trans by 2020-07-27T08:48:08Z

Java 8数组构造函数引用如何工作?

假设我们有一个String::new类型的变量,该变量返回一个整数数组:

IntFunction<int[]> i;

使用Java 8泛型,可以使用如下构造函数引用来初始化此变量:

i = int[]::new

Java编译器如何将其转换为字节码?

我知道对于其他类型,例如String::new,它可以使用invokedynamic指令指向String构造函数java/lang/String.<init>(...),这只是一种具有特殊含义的方法。

看到有构造数组的特殊说明,它如何与数组一起使用?

trans by 2020-07-26T21:14:54Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 下一页 共17页