我目前正在JDK 1.8上学习lambda表达式.我遇到了一些我发现我不理解的代码.
这是代码:
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.lang.Comparable;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args ) throws Exception
{
List<String> list = Arrays.asList("a", "b", "c");
sort(list, Comparable::<String>compareTo);
}
interface MyComparable {
public <T extends Comparable<T>> int compare(T obj1, T obj2 );
}
public static <T extends Comparable<T>> void sort(List<T> list, MyComparable comp) {
int n = comp.compare("5","2");
System.out.println(n);
}
}
Run Code Online (Sandbox Code Playgroud)
comp.compare("5", "3")最终执行"5".compareTo("2").我的理解是编译器需要找到一个具有相同签名的静态方法
public <T extends …Run Code Online (Sandbox Code Playgroud) 我想将地图转换为:
Map<String, List<String>>
Run Code Online (Sandbox Code Playgroud)
至
List<String>
Run Code Online (Sandbox Code Playgroud)
结果列表是所有列表值的合并。
我正在查看Lambda排序方法,我似乎无法轻易找到不区分大小写的属性.这是代码.
@org.junit.Test
public void StackOverflowQuestion() throws Exception {
List<String> sut = Arrays.asList("Xena","Scarlet","Joseph", "adam");
Stream<String> output = sut.stream().sorted();
output.forEach(trans2 -> System.out.println(trans2.toString()));
}
Run Code Online (Sandbox Code Playgroud)
我的输出是Joseph Scarlet Xena亚当
谢谢您的帮助.
我正在使用java.net.URL,但我收到了MalformedURLException.我试过查看文档,但我看不出我做错了什么.
下面是按下按钮时触发的代码示例.
public class DownloadController {
public void downloadResource() {
URL obj = new URL("http://www.example.com/docs/resource1.html");
}
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我正在使用IntelliJ.没有更多的代码可以显示,上面的代码实际上是控制器.我刚刚开始研究它.
考虑我有这个方法,它采用多个参数,我想做一些简单的计算,如count,sum,average,min,max,看看这个原生的例子:
public static void calculate(int... param) {
int sum = 0;
for (int i : param) {
sum += i;
}
System.out.println(sum);
}
Run Code Online (Sandbox Code Playgroud)
如何(int... param)在Java-8 Stream中传递此参数并进行此计算?
据我了解,Java枚举不可扩展.所以我想知道为什么枚举不是最终的定义.只是为了确保我理解我在JLS 8中查看的所有内容并找到以下内容:
枚举声明是隐式最终的,除非它包含至少一个具有类主体的枚举常量(第8.9.1节).
这是否意味着我可以创建一个可扩展的枚举常量,例如,自己的方法声明,字段,静态或对象初始化程序?
到目前为止,我没有找到一种方法可以让我得出结论,即枚举可能总是隐含最终的.我哪里错了?
当我尝试将epochTime转换为LocalDate时,出现此异常:
1)日期:2017-05-05 10:08:52.0
2)对应纪元:1493959132000
LocalDate lastUpdatedDate = LocalDate.ofEpochDay(1493959132000);
Run Code Online (Sandbox Code Playgroud)
例外情况:
java.time.DateTimeException: Invalid value for Year (valid values -999999999 - 999999999): 4090323145
at java.time.temporal.ValueRange.checkValidIntValue(ValueRange.java:330)
at java.time.temporal.ChronoField.checkValidIntValue(ChronoField.java:722)
at java.time.LocalDate.ofEpochDay(LocalDate.java:341)
Run Code Online (Sandbox Code Playgroud)
我了解到,java.time.LocalDate的源代码在https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#ofEpochDay-long-
这实际上意味着什么,什么时候出现?
这些天我一直在试图弄清楚如何使用Java 8流API执行减少并同时维护索引.这是一个例子:
我有以下字符串:
String charSequence = "kjsfjsfajdsfjsaaaaaasssddfddddbbbdddaaa";
Run Code Online (Sandbox Code Playgroud)
我想通过Stream操作返回三元组 (I, N, C)
哪里:
C 是一个角色 N 是一些事件 - 应该是最大的I 是第一次出现的字符串的索引(如果有多个字符串,则为第一个)例子:
"ddaaaacccjcccccjjj" 回报 (10, 5, c)"ddaaacccaaa"的第一次出现"aaa"是2这样的结果将是:
(2, 3, a)一般来说,如果我可以返回所有具有长度为3的子串的字符,那将是很好的,这样结果就是两个三元组(I, N, C) C.但这是可选的.如果我得到第一个三重权利,我可以自己前进.
更新:
我不是在寻找替代解决方案.我可以用另一个API很好地实现它.我试图理解为什么维护索引是困难的,或者为什么不能这样做,如果是这样的话.反对的好论据很好.
我想使用Java 8流来收集带有集合的地图.
例如,拥有以下数据:
Map<String, Collection<Integer>> data;
Run Code Online (Sandbox Code Playgroud)
我想用相应的键字符串来处理处理每个整数值的元素.例如:
data.keyValueStream((k,v)-> ...)
Run Code Online (Sandbox Code Playgroud)
知道怎么做到这一点?谢谢.
*关于"你为什么需要它?"的问题,这可能是一堆原因,我不确定它是否重要.无论如何,我会和你一起"流动"...我的具体情况是在他们的特定键下批量插入数据库中的所有值.让它保持一个普通的Java 8流问题......
为什么Java 8没有StringStream和CharStream.
StringStream.of("String1","String2");
StringStream.concat(stream1,stream2);
StringStream.builder().add("String1").add("string2").accept("string3");
Run Code Online (Sandbox Code Playgroud)