- 1. Stream API を自前に実装するときにおさえておきたいこと
- 2. [Java] マップの初期化と同時にキーを初期化する
- 3. GWTのファイル構造
- 4. Java_3層アーキテクチャについて
- 5. メモ MacBook Air (M1)でFlutterインストール時のJavaのエラー
- 6. db insert
- 7. db select
- 8. 案件準備 2023
- 9. Non-Decreasing Digits
- 10. Leetcode 1470. Shuffle the Array
- 11. Files.walkTree()
- 12. Files.newBufferedReader
- 13. Files#walk(), find(), list(), DirectoryStream
- 14. 【Eclipse】よく使うショートカットキー10選
- 15. Files class createDirectories method
- 16. Files class
- 17. Path interface
- 18. 【google-java-format】すべてのファイルを一発でフォーマットする方法
- 19. Valueを付与した変数にJUnitでモックする
- 20. 8.2 finalと定数(Java Basic編)
Stream API を自前に実装するときにおさえておきたいこと
# Stream API をちゃんと使えてますか?
Java 開発者のみなさん、Stream API を使っていますか?Stream API の使い方、ちゃんとおさえていますか?
Stream API をうまく使うと表現力の豊かなソースコードを書けるから、Java 開発者なら、使い方をおさえておいて損はないと思います。
この記事は自作のコレクションで、Stream API 対応のために機能を実装する際に、おさえておきたいポイントを、サンプルコードを交えて説明したいと思います。
なお、この記事は 2023/01 現在最新の LTS である Java 17 をベースに説明し、実際使用する JDK ディストリビューションは Temurin 17.0.6 となります。
また、この記事では、Java クラスのみ指す場合に `Class` のような表記を使っていますが、一般的な用語として捉えても問題ない箇所は平文のまま(日本語または英語)で記載します。
## Stream API おさらいのお供
以前[この Advent Calendar の記事](https://qiita.com
[Java] マップの初期化と同時にキーを初期化する
何度も調べてしまうので、自分用メモ。
“`
var m = new HashMap() {
{
put(“key1”, 100);
put(“key2”, 200);
}
};
“`
GWTのファイル構造
GWTでは、プロジェクトをそのまま生成すると次のようになります。
パッケージ事に、役割が明確に分かれているので、
わりとすぐ理解できます。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132663/cbceb882-78c1-4231-abec-72ddde798eb3.png)
Java_3層アーキテクチャについて
ソースを管理する方法として3層アーキテクチャがある。
Webアプリケーションを3つの関心事に分類して実装する。【プレゼンテーション層】
画面からの入力
画面への出力
@Controller↓
【ビジネスロジック層】アプリケーションの一番重要
業務ロジック
業務ルール
@Service↓
【データアクセス層】
データの保存
データの取得
@Repository参考:https://www.udemy.com/course/intellij-spring-boot/
メモ MacBook Air (M1)でFlutterインストール時のJavaのエラー
# Macについて
MacBook Air M1, 2020
チップ Apple M1
OS Ventura 13.2# 状況
下記を参照し、Macをインストール
https://docs.flutter.dev/get-started/install/macos
Javaは別途homebrewでインストール済み
“`
% flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.7.1, on macOS 13.2 22D49 darwin-arm64, locale ja-JP)
[✓] Android toolchain – develop for Android devices (Android SDK version 33.0.1)
[✓] Xcode – develop for iOS and macOS (Xcode 14.2)
[✓] Chrome – develop for the web
[!]
db insert
“`java
public class Outer {
public static void main(String[] args) {
try {
Connection con = DriverManager.getConnection(“jdbc:derby://localhost:1527/data/Sample”);
try(con) {
shokai(con);
String sql = “insert into firsttable values (?, ?)”;
PreparedStatement ps = con.prepareStatement(sql);
ps.setInt(1,60);
ps.setString(2,”sixty”);
int ret = ps.executeUpdate();
db select
no argument: Statement
one or more argument: PreparedStatement“`java
public class Outer {
public static void main(String[] args) throws Exception{
Connection con = DriverManager.getConnection(“jdbc:derby://localhost:1527/data/Sample”);
try(con) {
System.out.println(con);
String sql = “select * from firsttable where id<=?"; PreparedStatement ps = con.prepareStatement(sql); ps.setInt(1,20); ResultSet rs = ps.execute
案件準備 2023
# 案件準備
## サクってやるところはサクってやってしっかりやるところはしっかりやろう。
## Docker
◾︎ ドットインストール
https://dotinstall.com/lessons/basic_docker
◼︎Dockerのとこを読む。
さわって学ぶクラウドインフラ docker基礎からのコンテナ構築 Tankobon Hardcover – June 11, 2020
by 大澤 文孝 (著), 浅居 尚 (著)
www.amazon.co.jp/dp/4296106422
◼︎必要そうなコマンド
docker version
docker-compose up -d## CSS
◼︎急にちょっと使いたい時があるのでその時のための コードと参考にしたリンク“`
HTMLHTML内に直書
“`
◼︎Progateで学んでおく。デバックモードの練習はやっておいたほうが良い。
道場以外上級までやる。
https
Non-Decreasing Digits
http://acmgnyr.org/year2010/e.pdf
## 難易度
### Midium## アプローチ
### DP“`java
import java.io.*;
import java.math.BigDecimal;public class Main {
public static void main(String[] args) throws IOException {
BigDecimal[][] temp = new BigDecimal[65][10];temp[0][0] = BigDecimal.ONE;
temp[0][1] = BigDecimal.ONE;
temp[0][2] = BigDecimal.ONE;
temp[0][3] = BigDecimal.ONE;
temp[0][4] = BigDecimal.ONE;
temp[0][5] = BigDecimal.ONE;
temp
Leetcode 1470. Shuffle the Array
https://leetcode.com/problems/shuffle-the-array/description/
## アプローチ
### Brute-force“`java
class Solution {
public int[] shuffle(int[] nums, int n) {
int[] result = new int[nums.length];
int start = 0;
for (int i = 0; i < nums.length; i++) { if (i % 2 == 0) { result[i] = nums[start]; start++; } else { result[i] = nums[n]; n++; } } return result;
Files.walkTree()
FileVisitorに定義した以下の4つのメソッド通りにディレクトリをwalk through
preVisitDirectory
visitFile
postVisitDirectory
visitFileFailed“`java
public class Outer {
public static void main(String[] args) throws Exception{
Path p = Paths.get(“c:\\dirtest”);
FileVisitorfv = new FileVisitor () {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
System.out.println(“previsitdirectory : ” + dir)
Files.newBufferedReader
“`java
public class Outer {
public static void main(String[] args) throws Exception{Path p = Paths.get(“C:\\dirtest\\testfile.txt”);
Path p2 = Paths.get(“C:\\dirtest”);
File f = p2.toFile();
if(!Files.exists(p)) {
Files.createFile(p);
}
BufferedWriter bw = Files.newBufferedWriter(p,StandardOpenOption.APPEND);
Scanner sc = new Scanner(System.in);
try(bw) {
String str = sc.nextLine();
Files#walk(), find(), list(), DirectoryStream
Files.walk()は該当ディレクトリのサブディレクトリすべてを探索
Files.find()は該当ディレクトリのサブディレクトリすべてを探索、BiPredicateのフィルタ付き
Files.list()は該当ディレクトリの一覧
Files.newDirectoryStream()は該当ディレクトリの一覧“`java
public class Outer {
public static void main(String[] args) throws Exception{
Path p = Paths.get(“C:\\dirtest”);
BiPredicatebp = (p1,bfa) -> {
return p1.toFile().getAbsolutePath().endsWith(“.java”);
};
Streams = Files.find(p,3,bp);
s.forEach(Sy
【Eclipse】よく使うショートカットキー10選
ショートカットキー大好き、時短大好きな私が、Eclipseでよく使うショートカットキーをまとめました:relaxed:
最近Eclipseを使い始めた人は、ぜひこのショートカットキーを使ってみて下さい!## コンテンツ・アシスト(Ctrl + Space)
入力補完です。
変数名やクラス名を途中まで入力してこのキーを押すと、入力を補完してくれます。
mainメソッドは「main」、System.out.println()は「sysout」と入力してこのキーを押すことで、一瞬でコードを書くことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699644/b153a372-7b46-e5a2-08eb-047f8f6593f6.png)
素早くソースコードを書くためには、かなり大事です。## フォーマット(Ctrl + Shift + F)
コードのフォーマットを整えます。
![image.png](https://qiita-image-store.s3.ap-nort
Files class createDirectories method
Path(directory).resolve(Path(file/directory))で
特定のdirectoryのfile/directoryを参照することができる
createDirectoriesは、parent directoryがない場合にmkdirしてsubdirをmkdir
createDirectoryは、parent directoryがない場合 NoSuchFileException
Files.copy, Files.moveで、copy /moveができる
“`java
public class Outer {
public static void main(String[] args) throws Exception{
String dir = “C:\\dirtest”;
File f = new File(dir);
Path p = Paths.get(dir, “subDir”, “sub2Dir”);
Path parentDir = Paths.get(dir);
Files class
“`java
public class Outer {
public static void main(String[] args) throws Exception{
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(str);
Path p = Paths.get(“c:\\dirtest\\” + str);
File f = p.getParent().toFile();
System.out.println(f);
method(f);
if(!Files.exists(p)) {
Files.createFile(p);
}
method(f);
System.out.println(Files.getLastModifiedTime(p));
//
Path interface
File classとほぼ同様の機能を持つ
Paths.getでインスタンス化する。get(“C:”,”dirtest”,”test.txt”)のような
書き方が可能。それ以外の違いが?
toFile()でfileを生成することができる“`java
public class Outer {
public static void main(String[] args) {
Path p = Paths.get(“C:\\dirtest\\test.txt”);
System.out.println(p);
System.out.println(p.getParent());
System.out.println(p);
System.out.println(p.getRoot());
p = Paths.get(“C:”,”dirtest”,”test.txt”);
System.out.println(p);
p = Paths.get(“C:/
【google-java-format】すべてのファイルを一発でフォーマットする方法
# はじめに
[google-java-format](https://github.com/google/google-java-format)は、Javaのソースコードをフォーマットするプログラムです。
[Google Java Style](https://google.github.io/styleguide/javaguide.html)に基づいて、フォーマットします。IntelliJやEclipseなどのプラグインもありますが、ここではコマンドラインツールを利用します。
google-java-formatには、さまざまなオプションがありますが、
「すべてのファイルを一発でフォーマットする」ためのオプションはありません。オプションの一覧
“`:オプションの一覧
Usage: google-java-format [options] file(s)Options:
-i, -r, -replace, –replace
Send formatted output back to files
Valueを付与した変数にJUnitでモックする
# Valueを付与した変数にJUnitでモックする方法
## 概要
– `@Value`を付与した変数を扱うクラスのテストを実施した際、`@Value`の変数の値がテスト時のみnullとなってしまう事象が発生– 以下テスト対象のクラス
“`java
@Component
public class HogeService {@Value(“${sample.variable}”)
private String sampleVariable; ← ここの変数がテストでnullで返ってくる
…
“`↑の件、少し解決につまづいたので、解決方法を記載
## 結論
– `org.springframework.test.util.ReflectionTestUtils`を利用することでmockできる
“`java
ReflectionTestUtils.setField(instance, “name”, “value”, String.class);
“`### サンプル
– `@Value`を利用しているクラス
“`java
@Compone
8.2 finalと定数(Java Basic編)
### はじめに
#### 自己紹介
皆さん、こんにちは、斉藤賢哉と申します。私はこれまで、25年以上に渡って企業システムの開発に携わってきました。特にアーキテクトとして、ミッションクリティカルなシステムの技術設計や、Javaフレームワーク開発などの豊富な経験を有しています。
様々なセミナーでの登壇や雑誌への技術記事寄稿の実績があり、また以下のような書籍も執筆しています。
* [「マスタリング Java EE 5」(2007年)](https://amzn.asia/d/j0txqK5)
* [「アプリケーションアーキテクチャ設計パターン」(2017年)](https://amzn.asia/d/9avaCyF)いずれも**Java EE**(**Jakarta EE**)を中心にした企業システム開発のための書籍です。中でも [「アプリケーションアーキテクチャ設計パターン」](https://amzn.asia/d/9avaCyF)は、(Javaに限定されない)比較的普遍的なテーマを扱っており、内容的にはまだまだ陳腐化していないため、興味のある方は是非手に取っていただけると幸い