我想要更改所有项目list.
这样做的正确方法是什么java8?
public class TestIt {
public static void main(String[] args) {
ArrayList<String> l = new ArrayList<>();
l.add("AB");
l.add("A");
l.add("AA");
l.forEach(x -> x = "b" + x);
System.out.println(l);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在查看Map界面的Java源代码,并遇到了这一小段代码:
/**
* Returns a comparator that compares {@link Map.Entry} in natural order on value.
*
* <p>The returned comparator is serializable and throws {@link
* NullPointerException} when comparing an entry with null values.
*
* @param <K> the type of the map keys
* @param <V> the {@link Comparable} type of the map values
* @return a comparator that compares {@link Map.Entry} in natural order on value.
* @see Comparable
* @since 1.8
*/
public static <K, …Run Code Online (Sandbox Code Playgroud) 我有以下目录结构:
/path/to/stuff/org/foo/bar/
/path/to/stuff/org/foo/bar/1.2.3/
/path/to/stuff/org/foo/bar/1.2.3/myfile.ext
/path/to/stuff/org/foo/bar/1.2.4/
/path/to/stuff/org/foo/bar/1.2.4/myfile.ext
/path/to/stuff/org/foo/bar/blah/
/path/to/stuff/org/foo/bar/blah/2.1/
/path/to/stuff/org/foo/bar/blah/2.1/myfile.ext
/path/to/stuff/org/foo/bar/blah/2.2/
/path/to/stuff/org/foo/bar/blah/2.2/myfile.ext
Run Code Online (Sandbox Code Playgroud)
我想得到以下输出:
/path/to/stuff/org/foo/bar/
/path/to/stuff/org/foo/bar/blah/
Run Code Online (Sandbox Code Playgroud)
我有以下代码(下面),这是低效的,因为它打印出来:
/path/to/stuff/org/foo/bar/
/path/to/stuff/org/foo/bar/
/path/to/stuff/org/foo/bar/blah/
/path/to/stuff/org/foo/bar/blah/
Run Code Online (Sandbox Code Playgroud)
这是Java代码:
public class LocatorTest
{
@Test
public void testLocateDirectories()
throws IOException
{
long startTime = System.currentTimeMillis();
Files.walk(Paths.get("/path/to/stuff/"))
.filter(Files::isDirectory)
.forEach(Foo::printIfArtifactVersionDirectory);
long endTime = System.currentTimeMillis();
System.out.println("Executed in " + (endTime - startTime) + " ms.");
}
static class Foo
{
static void printIfArtifactVersionDirectory(Path path)
{
File f = path.toAbsolutePath().toFile();
List<String> filePaths = Arrays.asList(f.list(new MyExtFilenameFilter()));
if (!filePaths.isEmpty())
{
System.out.println(path.getParent());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
过滤器: …
我有一些CompletableFutures,我想并行运行它们,等待正常返回的第一个.
我知道我可以CompletableFuture.anyOf用来等待第一次返回,但这将正常或异常返回.我想忽略异常.
List<CompletableFuture<?>> futures = names.stream().map(
(String name) ->
CompletableFuture.supplyAsync(
() ->
// this calling may throw exceptions.
new Task(name).run()
)
).collect(Collectors.toList());
//FIXME Can not ignore exceptionally returned takes.
Future any = CompletableFuture.anyOf(futures.toArray(new CompletableFuture<?>[]{}));
try {
logger.info(any.get().toString());
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud) 同时使用 Java 8 和 Java 11,请考虑以下TreeSet带有String::compareToIgnoreCase比较器的内容:
final Set<String> languages = new TreeSet<>(String::compareToIgnoreCase);
languages.add("java");
languages.add("c++");
languages.add("python");
System.out.println(languages); // [c++, java, python]
Run Code Online (Sandbox Code Playgroud)
当我尝试删除 中存在的确切元素时TreeSet,它起作用了:所有指定的元素都被删除:
languages.removeAll(Arrays.asList("PYTHON", "C++"));
System.out.println(languages); // [java]
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试删除而不是 中存在的更多TreeSet,则调用根本不会删除任何内容(这不是后续调用,而是调用而不是上面的代码段):
languages.removeAll(Arrays.asList("PYTHON", "C++", "LISP"));
System.out.println(languages); // [c++, java, python]
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?为什么会这样?
编辑:String::compareToIgnoreCase是一个有效的比较器:
(l, r) -> l.compareToIgnoreCase(r)
Run Code Online (Sandbox Code Playgroud) 我有一个界面PackedObject:
public interface PackedObject {
int get();
int sum();
void setIndex(int index);
default int defaultSum() {
return get();
}
}
Run Code Online (Sandbox Code Playgroud)
抽象类AbstractPackedObject:
public abstract class AbstractPackedObject implements PackedObject {
protected int index = 0;
protected int[] buffer;
public void setIndex(int index) {
this.index = index;
}
public void setBuffer(int[] buffer) {
this.buffer = buffer;
}
@Override
public int sum(){
return get();
}
}
Run Code Online (Sandbox Code Playgroud)
并具体实施WrappedPackedObject:
public class WrappedPackedObject extends AbstractPackedObject implements PackedObject {
public WrappedPackedObject(int[] buffer) …Run Code Online (Sandbox Code Playgroud) 我使用Hibernate并尝试执行以下操作:
@Temporal(TemporalType.DATE)
@Column(name = "BIRTHDAY")
private Instant birthday;
Run Code Online (Sandbox Code Playgroud)
但有这个例外:
Caused by: org.hibernate.AnnotationException: @Temporal should only be set on a java.util.Date or java.util.Calendar property:
Run Code Online (Sandbox Code Playgroud)
正如我所建议的那样尝试使用
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-java8</artifactId>
<version>${hibernate.ver}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但有相同的例外.我应该做一些额外的步骤或如何解决这种情况?
我注意到java.time.Period类包含一些与可用的静态工厂方法相同的实例方法.
.withDays() 行为与...相同 Period.ofDays().withMonths() 行为与...相同 Period.ofMonths().withYears() 行为与...相同 Period.ofYears()这些实例方法令人困惑,因为它们创建了一个新的Period并返回它们,但没有考虑它们被调用的Period的状态.
Period p = Period.ofWeeks(3);
p = p.withDays(2);
Run Code Online (Sandbox Code Playgroud)
似乎合乎逻辑的是,这将返回3周,2天的时间段,但它只返回2天的时间段.这就像我打电话一样Period.ofDays(2).
此外,还有五种其他静态工厂方法,没有类似的实例方法.
那么,这三种实例方法是否存在?如果是这样,用例是什么?
给出以下代码:
List<String> strList = new ArrayList<>(Arrays.asList("Java","Python","Php"));
Stream<String> jFilter = strList.stream().filter(str -> str.startsWith("J"));
strList.add("JavaScript"); // element added after filter creation
strList.add("JQuery"); // element added after filter creation
System.out.println(Arrays.toString(jFilter.toArray()));
Run Code Online (Sandbox Code Playgroud)
哪个输出:
[Java, JavaScript, JQuery]
Run Code Online (Sandbox Code Playgroud)
即使在创建过滤后的流后添加了过滤结果,为什么会出现JavaScript并JQuery显示在过滤结果中?
java-8 ×10
java ×9
casting ×1
comparator ×1
hibernate ×1
java-11 ×1
java-7 ×1
java-stream ×1
java-time ×1
jpa ×1
jsr ×1
lambda ×1
list ×1
performance ×1
treeset ×1