标签: java-8

在java 8中删除JDBC ODBC桥

从Java 8开始,JDK将不再包含JDBC-ODBC Bridge.

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // classNotFoundException is thrown
Run Code Online (Sandbox Code Playgroud)

有没有其他解决方案连接JDBC-ODBC Bridge?

java jdbc-odbc java-8

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

正确安装java 8和java 7

我在我的Windows 7机器上安装了JDK 1.7,安装JDK 1.8 u20后,我遇到以下错误:

C:\>java -version
Error: Registry key 'Software\JavaSoft\Java Runtime Environment'\CurrentVersion'
has value '1.8', but '1.7' is required.
Error: could not find java.dll
Error: Could not find Java SE Runtime Environment.
Run Code Online (Sandbox Code Playgroud)

我的PATH变量指向旧版本(即1.7).

这里有什么问题以及我如何使用java 8和java 7?

java java-7 java-8

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

这是Files.lines()中的错误,还是我误解了并行流的某些内容?

环境:Ubuntu x86_64(14.10),Oracle JDK 1.8u25

我尝试使用并行流Files.lines()但我想要.skip()第一行(它是带有标题的CSV文件).所以我试着这样做:

try (
    final Stream<String> stream = Files.lines(thePath, StandardCharsets.UTF_8)
        .skip(1L).parallel();
) {
    // etc
}
Run Code Online (Sandbox Code Playgroud)

但是后来一列未能解析成一个int ...

所以我尝试了一些简单的代码.文件问题很简单:

$ cat info.csv 
startDate;treeDepth;nrMatchers;nrLines;nrChars;nrCodePoints;nrNodes
1422758875023;34;54;151;4375;4375;27486
$
Run Code Online (Sandbox Code Playgroud)

代码同样简单:

public static void main(final String... args)
{
    final Path path = Paths.get("/home/fge/tmp/dd/info.csv");
    Files.lines(path, StandardCharsets.UTF_8).skip(1L).parallel()
        .forEach(System.out::println);
}
Run Code Online (Sandbox Code Playgroud)

系统地得到以下结果(好吧,我只运行了大约20次):

startDate;treeDepth;nrMatchers;nrLines;nrChars;nrCodePoints;nrNodes
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?


编辑似乎问题或误解比这更根深蒂固(下面的两个例子是由FreeNode的## java编写的):

public static void main(final String... args)
{
    new BufferedReader(new StringReader("Hello\nWorld")).lines()
        .skip(1L).parallel()
        .forEach(System.out::println);

    final Iterator<String> iter
        = Arrays.asList("Hello", "World").iterator();
    final Spliterator<String> spliterator
        = Spliterators.spliteratorUnknownSize(iter, …
Run Code Online (Sandbox Code Playgroud)

java parallel-processing java-8 java-stream

34
推荐指数
3
解决办法
2842
查看次数

如何在Java中平面映射流?

我想将对象流的流转换为单个对象流.我知道我必须使用这种flatMap方法,但我无法实现这一点,请看:

Stream<Stream<Object>> objectStreams = ...
Stream<Object> flatMappedStream = objectStreams.flatMap( ... );
Run Code Online (Sandbox Code Playgroud)

有人可以帮帮我吗?

java java-8 java-stream

34
推荐指数
1
解决办法
2万
查看次数

Java8方法引用用作Function对象来组合函数

Java8中是否有一种方法可以使用方法引用作为Function对象来使用其方法,例如:

Stream.of("ciao", "hola", "hello")
    .map(String::length.andThen(n -> n * 2))
Run Code Online (Sandbox Code Playgroud)

这个问题与之无关Stream,它只是作为例子使用,我想对方法参考有答案

java lambda java-8 method-reference

34
推荐指数
5
解决办法
7511
查看次数

为什么Stream.limit在此代码段中没有按预期工作?

List<Integer> integer = Stream.generate(new Supplier<Integer>() {
    int i = 0 ;

    @Override
    public Integer get() {
        return ++i;
    }
}).filter(j -> j < 5)
  .limit(10)   // Note the call to limit here
  .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

与我的期望相反,collect呼叫永远不会回来.设置limit之前filter产生预期结果.为什么?

java java-8 java-stream

34
推荐指数
4
解决办法
1324
查看次数

Java 8将给定的时间和时区转换为UTC时间

我有一个字符串类型就像一个计时:"2015-01-05 17:00"ZoneId"Australia/Sydney".

如何使用Java 8 datetime API将此时间信息转换为对应的UTC时间?

还需要考虑DST的东西.

java utc java-8 java-time

34
推荐指数
2
解决办法
6万
查看次数

为什么Java 8'Collector'类以这种方式设计?

我们知道Java 8引入了一个新的Stream API,并且java.util.stream.Collector是定义如何聚合/收集数据流的接口.

但是,Collector接口的设计如下:

public interface Collector<T, A, R> {
    Supplier<A> supplier();
    BiConsumer<A, T> accumulator();
    BinaryOperator<A> combiner();
    Function<A, R> finisher();
}
Run Code Online (Sandbox Code Playgroud)

为什么它的设计不符合以下规定?

public interface Collector<T, A, R> {
    A supply();
    void accumulate(A accumulator, T value);
    A combine(A left, A right);
    R finish(A accumulator);
}
Run Code Online (Sandbox Code Playgroud)

后者更容易实现.将它设计为前者的考虑是什么?

java java-8 java-stream collectors

34
推荐指数
2
解决办法
2298
查看次数

在Java Lambda中,为什么getClass()在捕获的变量上调用

如果你看一下字节码

Consumer<String> println = System.out::println;
Run Code Online (Sandbox Code Playgroud)

Java 8更新121生成的字节代码是

GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
DUP
INVOKEVIRTUAL java/lang/Object.getClass ()Ljava/lang/Class;
POP
INVOKEDYNAMIC accept(Ljava/io/PrintStream;)Ljava/util/function/Consumer; [
  // handle kind 0x6 : INVOKESTATIC
  java/lang/invoke/LambdaMetafactory.metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
  // arguments:
  (Ljava/lang/Object;)V, 
  // handle kind 0x5 : INVOKEVIRTUAL
  java/io/PrintStream.println(Ljava/lang/String;)V, 
  (Ljava/lang/String;)V
]
ASTORE 1
Run Code Online (Sandbox Code Playgroud)

getClass()正在调用该方法System.out,结果被忽略.

这是间接空引用检查吗?

当然,如果你跑

PrintStream out = null;
Consumer<String> println = out::println;
Run Code Online (Sandbox Code Playgroud)

这会触发NullPointerException.

java lambda bytecode javac java-8

34
推荐指数
1
解决办法
964
查看次数

地图和mapToObj之间的Java Stream差异

我感觉不到Java 8 Streams map()mapToObj()方法之间的区别.在两者中我们都可以创建对象并将对象返回到流,所以为什么这些方法存在为两个,而不仅仅是一个.

你能用例子给我解释一下吗?

java java-8 java-stream

34
推荐指数
2
解决办法
8914
查看次数