Skip to content
Skillpedia
General coding48k · #4279

java

Helps your agent create robust and optimized Java code. It's useful for developing enterprise applications and Android.

What it does

This guide teaches how to write more efficient and modern Java code. It shows examples of using newer language features to make your code cleaner and easier to understand.

When to use it

  • ✓When learning new ways to write Java code.
  • ✓When reviewing or improving existing Java code.
  • ✓When wanting to use modern Java features.

Example of what to ask your AI

“How can I use Streams to filter and transform a list of items in Java?”

Want more? Open the sections below.

How to use

The easiest way: copy the message below and paste it into Claude, ChatGPT, Cursor or any AI. It reads the skill and follows the instructions.

Skill link

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/super-code/java/SKILL.md

Ready-to-paste message

Use this skill to help me: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/super-code/java/SKILL.md Read the SKILL.md file at that link and follow its instructions for my task.
How it works

The AI compares your code with Java best practice examples. It suggests using features like Streams, Optional, and Records to simplify common tasks and avoid errors.

Installation

Easiest way: copy the skill link and paste it into Claude, ChatGPT or Cursor asking it to follow the instructions.

In the terminal (Claude Code, Codex, Cursor), in your project folder:

npx skills add sickn33/agentic-awesome-skills --skill java

Or download just the file:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/super-code/java/SKILL.md -o SKILL.md
Technical content (original SKILL.md)

Original text by the author, straight from GitHub.

Java: Idiomatic Efficiency Reference

When to Use

  • Use this skill when the task matches this description: Language-specific super-code guidelines for java.

Table of Contents

  1. Streams & Collections
  2. Optional
  3. Records & Data Classes
  4. Switch Expressions
  5. Concurrency
  6. Error Handling
  7. Anti-patterns specific to Java

1. Streams & Collections {#streams}

// ❌ Imperative accumulation
List<String> result = new ArrayList<>();
for (Item item : items) {
    if (item.isActive()) result.add(item.getName().toUpperCase());
}

// ✅
List<String> result = items.stream()
    .filter(Item::isActive)
    .map(item -> item.getName().toUpperCase())
    .toList(); // Java 16+; use .collect(Collectors.toList()) before
// ❌ Manual grouping
Map<String, List<Item>> grouped = new HashMap<>();
for (Item item : items) {
    grouped.computeIfAbsent(item.getCategory(), k -> new ArrayList<>()).add(item);
}

// ✅
Map<String, List<Item>> grouped = items.stream()
    .collect(Collectors.groupingBy(Item::getCategory));
// ❌ Manual sum
int total = 0;
for (Order o : orders) total += o.getAmount();

// ✅
int total = orders.stream().mapToInt(Order::getAmount).sum();

Prefer method references (Item::isActive) over equivalent lambdas (item -> item.isActive()).


2. Optional {#optional}

// ❌ Null check chain
String city = null;
if (user != null && user.getAddress() != null) {
    city = user.getAddress().getCity();
}

// ✅
String city = Optional.ofNullable(user)
    .map(User::getAddress)
    .map(Address::getCity)
    .orElse(null);
// ❌ Optional.get() without isPresent()
String name = optional.get(); // throws if empty

// ✅
String name = optional.orElse("default");
// or: optional.orElseThrow(() -> new IllegalStateException("name required"));
// ❌ Optional as a field or parameter (anti-pattern)
class User { private Optional<String> nickname; }

// ✅ — Optional is for return types only
class User { private String nickname; } // nullable field
public Optional<String> getNickname() { return Optional.ofNullable(nickname); }

3. Records & Data Classes {#records}

// ❌ Manual POJO
class Point {
    private final int x, y;
    public Point(int x, int y) { this.x = x; this.y = y; }
    public int getX() { return x; }
    public int getY() { return y; }
    // + equals, hashCode, toString...
}

// ✅ (Java 16+)
record Point(int x, int y) {}
// ❌ Builder pattern for a 2-field object
User user = new User.Builder().name("Alice").age(30).build();

// ✅ — use record or constructor directly for small objects
record User(String name, int age) {}
var user = new User("Alice", 30);

Use record for any immutable data carrier. Keep builders only for objects with many optional fields.


4. Switch Expressions {#switch}

// ❌ Switch statement with fall-through and break
String label;
switch (status) {
    case ACTIVE: label = "Active"; break;
    case INACTIVE: label = "Inactive"; break;
    default: label = "Unknown";
}

// ✅ (Java 14+)
String label = switch (status) {
    case ACTIVE -> "Active";
    case INACTIVE -> "Inactive";
    default -> "Unknown";
};
// ❌ instanceof + cast
if (shape instanceof Circle) {
    Circle c = (Circle) shape;
    return c.radius() * c.radius() * Math.PI;
}

// ✅ Pattern matching (Java 16+)
if (shape instanceof Circle c) {
    return c.radius() * c.radius() * Math.PI;
}

5. Concurrency {#concurrency}

// ❌ Raw Thread creation
Thread t = new Thread(() -> doWork());
t.start();

// ✅
ExecutorService exec = Executors.newVirtualThreadPerTaskExecutor(); // Java 21
exec.submit(() -> doWork());
// ❌ synchronized on this for fine-grained state
synchronized(this) { counter++; }

// ✅
AtomicInteger counter = new AtomicInteger();
counter.incrementAndGet();

Prefer CompletableFuture.allOf() over blocking .get() chains for parallel async work.


6. Error Handling {#errors}

// ❌ Catching Exception to log and swallow
try {
    risky();
} catch (Exception e) {
    log.error("error", e);
}

// ✅ — rethrow as unchecked if you can't handle it
try {
    risky();
} catch (IOException e) {
    throw new UncheckedIOException(e);
}
// ❌ Checked exceptions declared on every method

…
FAQ

What are 'Records' in Java?

Records are a simple way to create immutable classes that hold data, like an 'information container', without needing to write much repetitive code.

Why use 'Optional'?

Optional helps handle values that may or may not exist (avoiding 'null' errors), making the code safer and clearer about what to expect.

What are 'Streams'?

Streams are a way to process sequences of data (like lists) more declaratively and efficiently, allowing you to chain operations like filtering and transforming.

Details

Original description by the author

Language-specific super-code guidelines for java.

repo: sickn33/agentic-awesome-skills

Popularity

GitHub stars
48k
Ranking position
#4279
License
MIT
Updated
10/15/2026

Is this skill useful?

0

Sign in to vote.

Comments

  • …

More skills from this repository

Similar skills